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
- Eine Visual Basic .NET-Version dieses Artikels finden Sie unter How to do basic file E/O in Visual Basic 2005 or in Visual Basic .NET.
- Eine Visual C++ .NET-Version dieses Artikels finden Sie unter How to do basic file E/O in Visual C++ or in Visual C++ .NET.
- Dieser Artikel bezieht sich auf die Namespaces
System.IO
der Microsoft .NET Framework-Klassenbibliothek undSystem.Collections
.
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 File
Klassen , 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
Erstellen Sie in Visual C# eine neue Windows Forms Application. Standardmäßig wird Form1 erstellt.
Öffnen Sie das Codefenster für Form1 (Form1.cs).
Löschen Sie den gesamten Code im Form1.cs.
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); } } }
Öffnen Sie das Codefenster für Form1.Designer. cs.
Löschen Sie den gesamten Code in Form1.Designer. cs.
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; } }
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.
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.
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für