Verwenden von Visual C# für einfache Datei-E/A-Vorgänge

In diesem Artikel wird beschrieben, wie Sie grundlegende Datei-E/A-Vorgänge in Visual C# ausführen, und es wird ein Codebeispiel bereitgestellt, um die Ausführung dieser Aufgabe zu veranschaulichen.

Ursprüngliche Produktversion: Visual C#
Ursprüngliche KB-Nummer: 304430

Zusammenfassung

Hinweis

In diesem Schritt-für-Schritt-Artikel erfahren Sie, wie Sie sechs grundlegende Dateieingabe-/Ausgabevorgänge (E/A) in Visual C# ausführen. Wenn Sie noch nicht mit dem .NET Framework vertraut sind, werden Sie feststellen, dass das Objektmodell für Dateivorgänge in .NET dem FileSystemObject bei vielen Visual Studio 6.0-Entwicklern beliebten (FSO) ähnelt. Um den Übergang zu vereinfachen, die Funktionalität, die unter How To Use FileSystemObject with Visual Basic (Verwenden von FileSystemObject mit Visual Basic) veranschaulicht wird.

Sie können weiterhin in FileSystemObject .NET verwenden. Da es sich bei um FileSystemObject eine COM-Komponente (Component Object Model) handelt, erfordert .NET, dass der Zugriff auf das Objekt über die Interop-Ebene erfolgt. Microsoft .NET generiert einen Wrapper für die Komponente, wenn Sie sie verwenden möchten. Die FileKlassen , FileInfo, Directory, DirectoryInfo und andere verwandte Klassen im .NET Framework bieten jedoch Funktionen, die für FSO nicht verfügbar sind, ohne den Mehraufwand der Interop-Ebene.

Veranschaulichte Datei-E/A-Vorgänge

In den Beispielen in diesem Artikel werden grundlegende Datei-E/A-Vorgänge beschrieben. Im Abschnitt Schritt-für-Schritt-Beispiel wird beschrieben, wie Sie ein Beispielprogramm erstellen, das die folgenden Datei-E/A-Vorgänge veranschaulicht:

  • Lesen einer Textdatei
  • Schreiben einer Textdatei
  • Anzeigen von Dateiinformationen
  • Datenträgerlaufwerke auflisten
  • Ordner auflisten
  • Dateien auflisten

Wenn Sie die folgenden Codebeispiele direkt verwenden möchten, beachten Sie Folgendes:

  • Schließen Sie den System.IO Namespace wie folgt ein:

    using System.IO;
    
  • Deklarieren Sie die winDir Variable wie folgt:

    string winDir=System.Environment.GetEnvironmentVariable("windir");
    
  • Die addListItem Funktion wird wie folgt deklariert:

    private void addListItem(string value)
    {
        this.listBox1.Items.Add(value);
    }
    

    Anstatt die addListItem Funktion zu deklarieren und zu verwenden, können Sie die folgende Anweisung direkt verwenden:

    this.listBox1.Items.Add(value);
    

Lesen einer Textdatei

Im folgenden Beispielcode wird eine StreamReader -Klasse verwendet, um die System.ini-Datei zu lesen. Der Inhalt der Datei wird einem ListBox-Steuerelement hinzugefügt. Der try...catch -Block wird verwendet, um das Programm zu warnen, wenn die Datei leer ist. Es gibt viele Möglichkeiten, zu bestimmen, wann das Ende der Datei erreicht ist. In diesem Beispiel wird die Peek -Methode verwendet, um die nächste Zeile vor dem Lesen zu untersuchen.

StreamReader reader=new StreamReader(winDir + "\\system.ini");
try
{
    do
    {
        addListItem(reader.ReadLine());
    }
    while(reader.Peek()!= -1);
}
catch
{
    addListItem("File is empty");
}
finally
{
    reader.Close();
}

Schreiben einer Textdatei

In diesem Beispielcode wird eine StreamWriter -Klasse verwendet, um eine Datei zu erstellen und in diese zu schreiben. Wenn Sie über eine vorhandene Datei verfügen, können Sie sie auf die gleiche Weise öffnen.

StreamWriter writer = new StreamWriter("c:\\KBTest.txt");
writer.WriteLine("File created using StreamWriter class.");
writer.Close();
this.listbox1.Items.Clear();
addListItem("File Written to C:\\KBTest.txt");

Anzeigen von Dateiinformationen

In diesem Beispielcode wird ein FileInfo -Objekt verwendet, um auf die Eigenschaften einer Datei zuzugreifen. in diesem Beispiel wird Notepad.exe verwendet. Die Eigenschaften werden in einem ListBox-Steuerelement angezeigt.

FileInfo FileProps =new FileInfo(winDir + "\\notepad.exe");
addListItem("File Name = " + FileProps.FullName);
addListItem("Creation Time = " + FileProps.CreationTime);
addListItem("Last Access Time = " + FileProps.LastAccessTime);
addListItem("Last Write TIme = " + FileProps.LastWriteTime);
addListItem("Size = " + FileProps.Length);
FileProps = null;

Datenträgerlaufwerke auflisten

In diesem Beispielcode werden die Directory Klassen und Drive verwendet, um die logischen Laufwerke auf einem System aufzulisten. In diesem Beispiel werden die Ergebnisse in einem ListBox-Steuerelement angezeigt.

string[] drives = Directory.GetLogicalDrives();
foreach(string drive in drives)
{
    addListItem(drive);
}

Unterordner auflisten

In diesem Beispielcode wird die GetDirectories -Methode der Directory -Klasse verwendet, um eine Liste von Ordnern abzurufen.

string[] dirs = Directory.GetDirectories(winDir);
foreach(string dir in dirs)
{
    addListItem(dir);
}

Dateien auflisten

In diesem Beispielcode wird die GetFiles -Methode der Directory -Klasse verwendet, um eine Liste von Dateien abzurufen.

string[] files= Directory.GetFiles(winDir);
foreach (string i in files)
{
    addListItem(i);
}

Viele Dinge können schiefgehen, wenn ein Benutzer Zugriff auf Dateien erhält. Die Dateien sind möglicherweise nicht vorhanden, die Dateien werden möglicherweise verwendet, oder Benutzer verfügen möglicherweise nicht über Rechte für die Dateien oder Ordner, auf die sie zugreifen möchten. Es ist wichtig, diese Möglichkeiten beim Schreiben von Code zu berücksichtigen und die möglicherweise generierten Ausnahmen zu behandeln.

Schritt-für-Schritt-Beispiel

  1. Erstellen Sie in Visual C# eine neue Windows Forms Application. Standardmäßig wird Form1 erstellt.

  2. Öffnen Sie das Codefenster für Form1 (Form1.cs).

  3. Löschen Sie den gesamten Code im Form1.cs.

  4. Fügen Sie den folgenden Code in das Fenster CodeBehind Editor ein.

    using System.Windows.Forms;
    using System.IO;
    
    namespace fso_cs
    {
        public partial class Form1 : Form
        {
            string winDir = System.Environment.GetEnvironmentVariable("windir");
    
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, System.EventArgs e)
            {
                //How to read a text file.
                //try...catch is to deal with a 0 byte file.
                this.listBox1.Items.Clear();
                StreamReader reader = new StreamReader(winDir + "\\system.ini");
                try
                {
                    do
                    {
                        addListItem(reader.ReadLine());
                    }
                    while (reader.Peek()!= -1);
                }
                catch
                {
                    addListItem("File is empty");
                }
                finally
                {
                    reader.Close();
                }
            }
    
            private void button2_Click(object sender, System.EventArgs e)
            {
                //Demonstrates how to create and write to a text file.
                StreamWriter writer = new StreamWriter("c:\\KBTest.txt");
                writer.WriteLine("File created using StreamWriter class.");
                writer.Close();
                this.listBox1.Items.Clear();
                addListItem("File Written to C:\\KBTest.txt");
            }
    
            private void button3_Click(object sender, System.EventArgs e)
            {
                //How to retrieve file properties (example uses Notepad.exe).
                this.listBox1.Items.Clear();
                FileInfo FileProps = new FileInfo(winDir + "\\notepad.exe");
                addListItem("File Name = " + FileProps.FullName);
                addListItem("Creation Time = " + FileProps.CreationTime);
                addListItem("Last Access Time = " + FileProps.LastAccessTime);
                addListItem("Last Write TIme = " + FileProps.LastWriteTime);
                addListItem("Size = " + FileProps.Length);
                FileProps = null;
            }
    
            private void button4_Click(object sender, System.EventArgs e)
            {
                //Demonstrates how to obtain a list of disk drives.
                this.listBox1.Items.Clear();
                string[] drives = Directory.GetLogicalDrives();
                foreach (string drive in drives)
                {
                    addListItem(drive);
                }
            }
    
            private void button5_Click(object sender, System.EventArgs e)
            {
                //How to get a list of folders (example uses Windows folder). 
                this.listBox1.Items.Clear();
                string[] dirs = Directory.GetDirectories(winDir);
                foreach (string dir in dirs)
                {
                    addListItem(dir);
                }
            }
    
            private void button6_Click(object sender, System.EventArgs e)
            {
                //How to obtain list of files (example uses Windows folder).
                this.listBox1.Items.Clear();
                string[] files = Directory.GetFiles(winDir);
                foreach (string i in files)
                {
                    addListItem(i);
                }
            }
    
            private void Form1_Load(object sender, System.EventArgs e)
            {
                this.button1.Text = "Read Text File";
                this.button2.Text = "Write Text File";
                this.button3.Text = "View File Information";
                this.button4.Text = "List Drives";
                this.button5.Text = "List Subfolders";
                this.button6.Text = "List Files";
            }
    
            private void addListItem(string value)
            {
                this.listBox1.Items.Add(value);
            }
        }
    }
    
  5. Öffnen Sie das Codefenster für Form1.Designer. cs.

  6. Löschen Sie den gesamten Code in Form1.Designer. cs.

  7. Fügen Sie den folgenden Code in Form1.Designer ein. cs.

    namespace fso_cs
    {
        partial class Form1
        {
            /// <summary>
            /// Required designer variable.
            /// </summary>
            private System.ComponentModel.IContainer components = null;
    
            /// <summary>
            /// Clean up any resources being used.
            /// </summary>
            /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
            protected override void Dispose(bool disposing)
            {
                if (disposing && (components != null))
                {
                    components.Dispose();
                }
                base.Dispose(disposing);
            }
    
            #region Windows Form Designer generated code
            /// <summary>
            /// Required method for Designer support - do not modify
            /// the contents of this method with the code editor.
            /// </summary>
            private void InitializeComponent()
            {
                this.button1 = new System.Windows.Forms.Button();
                this.button2 = new System.Windows.Forms.Button();
                this.button3 = new System.Windows.Forms.Button();
                this.button4 = new System.Windows.Forms.Button();
                this.button5 = new System.Windows.Forms.Button();
                this.button6 = new System.Windows.Forms.Button();
                this.listBox1 = new System.Windows.Forms.ListBox();
                this.SuspendLayout();
    
                // button1
                this.button1.Location = new System.Drawing.Point(53, 30);
                this.button1.Name = "button1";
                this.button1.Size = new System.Drawing.Size(112, 23);
                this.button1.TabIndex = 1;
                this.button1.Text = "button1";
                this.button1.Click += new System.EventHandler(this.button1_Click);
    
                // button2
                this.button2.Location = new System.Drawing.Point(53, 62);
                this.button2.Name = "button2";
                this.button2.Size = new System.Drawing.Size(112, 23);
                this.button2.TabIndex = 2;
                this.button2.Text = "button2";
                this.button2.Click += new System.EventHandler(this.button2_Click);
    
                // button3
                this.button3.Location = new System.Drawing.Point(53, 94);
                this.button3.Name = "button3";
                this.button3.Size = new System.Drawing.Size(112, 23);
                this.button3.TabIndex = 3;
                this.button3.Text = "button3";
                this.button3.Click += new System.EventHandler(this.button3_Click);
    
                // button4
                this.button4.Location = new System.Drawing.Point(53, 126);
                this.button4.Name = "button4";
                this.button4.Size = new System.Drawing.Size(112, 23);
                this.button4.TabIndex = 4;
                this.button4.Text = "button4";
                this.button4.Click += new System.EventHandler(this.button4_Click);
    
                // button5
                this.button5.Location = new System.Drawing.Point(53, 158);
                this.button5.Name = "button5";
                this.button5.Size = new System.Drawing.Size(112, 23);
                this.button5.TabIndex = 5;
                this.button5.Text = "button5";
                this.button5.Click += new System.EventHandler(this.button5_Click);
    
                // button6
                this.button6.Location = new System.Drawing.Point(53, 190);
                this.button6.Name = "button6";
                this.button6.Size = new System.Drawing.Size(112, 23);
                this.button6.TabIndex = 6;
                this.button6.Text = "button6";
                this.button6.Click += new System.EventHandler(this.button6_Click);
    
                // listBox1
                this.listBox1.FormattingEnabled = true;
                this.listBox1.Location = new System.Drawing.Point(204, 30);
                this.listBox1.Name = "listBox1";
                this.listBox1.Size = new System.Drawing.Size(270, 199);
                this.listBox1.TabIndex = 7;
    
                // Form1
                this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
                this.ClientSize = new System.Drawing.Size(525, 273);
                this.Controls.Add(this.button6);
                this.Controls.Add(this.button5);
                this.Controls.Add(this.button4);
                this.Controls.Add(this.button3);
                this.Controls.Add(this.button2);
                this.Controls.Add(this.button1);
                this.Controls.Add(this.listBox1);
                this.Name = "Form1";
                this.Text = "Form1";
                this.Load += new System.EventHandler(this.Form1_Load);
                this.ResumeLayout(false);
            }
            #endregion
    
            private System.Windows.Forms.Button button1;
            private System.Windows.Forms.Button button2;
            private System.Windows.Forms.Button button3;
            private System.Windows.Forms.Button button4;
            private System.Windows.Forms.Button button5;
            private System.Windows.Forms.Button button6;
            private System.Windows.Forms.ListBox listBox1;
        }
    }
    
  8. Visual C# fügt dem Projekt standardmäßig ein Formular hinzu, wenn Sie ein Windows Forms-Projekt erstellen. Dieses Formular heißt Form1. Die beiden Quellcodedateien, die das Formular darstellen, heißen Form1.cs und Form1.Designer. cs. Sie schreiben Ihren Code in die Form1.cs-Datei . Die Windows Forms Designer schreibt vom Designer generierten Code in form1.Designer. cs-Datei. Der Code in den vorherigen Schritten gibt an, dass organization.

  9. Drücken Sie F5, um das Programm zu erstellen und dann auszuführen. Klicken Sie auf die Schaltflächen, um die verschiedenen Aktionen anzuzeigen. Wenn Sie den Beispielcode anzeigen, können Sie den Bereich windows Form Designer generierten Code reduzieren, um diesen Code auszublenden.