Verwenden von Visual C# zum Ausführen grundlegender Datei-E/A

In diesem Artikel wird beschrieben, wie Sie grundlegende Datei-E/A in Visual C# ausführen, und es wird ein Codebeispiel zur Veranschaulichung der Ausführung dieser Aufgabe bereitgestellt.

Originalversion des Produkts:   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 mit dem .NET Framework noch nicht fertig sind, werden Sie feststellen, dass das Objektmodell für Dateivorgänge in .NET dem (FSO) ähnelt, das FileSystemObject bei vielen Visual Studio 6.0-Entwicklern beliebt ist. Um den Übergang zu vereinfachen, die Funktionalität, die in How To Use FileSystemObject with Visual Basic veranschaulicht wird.

Sie können das FileSystemObject in .NET weiterhin verwenden. Da es sich bei der FileSystemObject Komponente um eine COM-Komponente (Component Object Model) handelt, erfordert .NET, dass der Zugriff auf das Objekt über die Interoperabilitätsschicht erfolgt. Microsoft .NET generiert einen Wrapper für die Komponente für Sie, wenn Sie sie verwenden möchten. Jedoch bieten die File, FileInfo, , DirectoryInfo DirectoryKlassen und andere verwandte Klassen in der .NET Framework, Funktionalität, die nicht mit dem FSO verfügbar ist, ohne den Aufwand der Interop-Ebene.

Vorgeführte Datei-E/A-Vorgänge

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

  • Lesen einer Textdatei
  • Schreiben einer Textdatei
  • Dateiinformationen anzeigen
  • Datenträgerlaufwerke auflisten
  • Listenordner
  • 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 zum Lesen der System.ini Datei verwendet. Der Inhalt der Datei wird einem ListBox-Steuerelement hinzugefügt. Der try...catch Block wird verwendet, um das Programm zu benachrichtigen, wenn die Datei leer ist. Es gibt viele Möglichkeiten, um 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 zum Erstellen und Schreiben in eine Datei verwendet. 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");

Dateiinformationen anzeigen

Dieser Beispielcode verwendet ein FileInfo Objekt, um auf die Eigenschaften einer Datei zuzugreifen. Notepad.exe wird in diesem Beispiel 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

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

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

Unterordner auflisten

Dieser Beispielcode verwendet die GetDirectories Methode der Directory Klasse, um eine Liste von Ordnern abzurufen.

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

Dateien auflisten

Dieser Beispielcode verwendet die GetFiles Methode der Directory Klasse, um eine Auflistung von Dateien abzurufen.

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

Viele Dinge können schief gehen, wenn ein Benutzer Zugriff auf Dateien erhält. Die Dateien sind möglicherweise nicht vorhanden, die Dateien werden möglicherweise verwendet, oder Benutzer haben keine 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-Anwendung. Standardmäßig wird Form1 erstellt.

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

  3. Löschen Sie den gesamten Code in " Form1.cs".

  4. Fügen Sie den folgenden Code in das CodeBehind-Editor-Fenster 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.cs ein.

    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 Datei "Form1.cs ". Der Windows Forms Designer schreibt vom Designer generierten Code in die Datei "Form1.Designer.cs". Der Code in den vorherigen Schritten spiegelt diese Organisation wider.

  9. Drücken Sie F5, um das Programm zu erstellen und auszuführen. Klicken Sie auf die Schaltflächen, um die verschiedenen Aktionen anzuzeigen. Wenn Sie den Beispielcode anzeigen, möchten Sie möglicherweise den Bereich mit dem Namen Windows vom Formular-Designer generierten Code reduzieren, um diesen Code auszublenden.