Freigeben über


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 ein Codebeispiel zur Veranschaulichung dieser Aufgabe bereitstellen.

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

Zusammenfassung

Notiz

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

Sie können das FileSystemObject .NET weiterhin verwenden. Da es FileSystemObject sich um 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 FileInfoDirectoryDirectoryInfo , Klassen und andere verwandte Klassen im .NET Framework bieten jedoch Funktionen, die nicht mit dem FSO verfügbar sind, ohne den Aufwand der Interop-Ebene.

Veranschaulichte 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
  • Auflisten von Datenträgerlaufwerken
  • Auflisten von Ordnern
  • Auflisten von Dateien

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

Der folgende Beispielcode verwendet eine StreamReader Klasse zum Lesen der System.ini Datei. 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, 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

Dieser Beispielcode verwendet eine StreamWriter Klasse zum Erstellen und Schreiben in eine Datei. 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;

Auflisten von Datenträgerlaufwerken

In diesem Beispielcode werden die logischen Laufwerke in einem System mithilfe der Directory Klassen und Drive der logischen Laufwerke aufgeführt. 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);
}

Auflisten von Dateien

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 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 ausnahmen zu behandeln, die generiert werden können.

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 im 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, sind Form1.cs und Form1.Designer.cs benannt. Sie schreiben Ihren Code in die Form1.cs Datei. Der Windows Forms-Designer schreibt vom Designer generierten Code in der 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 dann auszuführen. Klicken Sie auf die Schaltflächen, um die verschiedenen Aktionen anzuzeigen. Wenn Sie den Beispielcode anzeigen, sollten Sie den Bereich mit dem Namen "Generierter Code für Windows Form Designer" reduzieren, um diesen Code auszublenden.