Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule opisano sposób wykonywania podstawowych operacji we/wy plików w języku Visual C# i przedstawiono przykładowy kod ilustrujący sposób wykonywania tego zadania.
Oryginalna wersja produktu: Visual C#
Oryginalny numer KB: 304430
Podsumowanie
Uwaga 16.
- Aby zapoznać się z wersją platformy .NET języka Visual Basic w tym artykule, zobacz How to do basic file I/O in Visual Basic 2005 or in Visual Basic .NET (Jak wykonać podstawowe we/wy w języku Visual Basic 2005 lub Visual Basic .NET).
- Aby zapoznać się z wersją programu Visual C++ .NET tego artykułu, zobacz How to do basic file I/O in Visual C++ or in Visual C++ .NET (Jak wykonać podstawowe we/wy pliku w języku Visual C++ lub Visual C++).
- W tym artykule opisano przestrzenie
System.IO
nazw biblioteki klas programu Microsoft .NET Framework iSystem.Collections
.
W tym artykule krok po kroku pokazano, jak wykonać sześć podstawowych operacji wejścia/wyjścia (we/wy) pliku w programie Visual C#. Jeśli dopiero zaczynasz korzystać z programu .NET Framework, okaże się, że model obiektów dla operacji na plikach na platformie .NET jest podobny do FileSystemObject
modelu obiektów (FSO), który jest popularny dla wielu deweloperów programu Visual Studio 6.0. Aby ułatwić przejście, funkcje przedstawione w temacie How To Use FileSystemObject with Visual Basic (Jak używać obiektu FileSystemObject w języku Visual Basic).
Nadal można używać narzędzia FileSystemObject
na platformie .NET. FileSystemObject
Ponieważ element jest składnikiem modelu obiektów składników (COM), platforma .NET wymaga dostępu do obiektu za pośrednictwem warstwy międzyoperacyjnej. Platforma Microsoft .NET generuje otokę dla składnika, jeśli chcesz go użyć. Jednak File
klasy , FileInfo
, Directory
DirectoryInfo
i inne powiązane klasy w programie .NET Framework oferują funkcje, które nie są dostępne dla FSO, bez obciążenia warstwy międzyoperacyjnej.
Pokazane operacje we/wy pliku
W przykładach w tym artykule opisano podstawowe operacje we/wy plików. W sekcji Przykład krok po kroku opisano sposób tworzenia przykładowego programu, który demonstruje następujące operacje we/wy pliku:
- Odczytywanie pliku tekstowego
- Pisanie pliku tekstowego
- Wyświetlanie informacji o pliku
- Wyświetlanie listy dysków
- Wyświetlanie listy folderów
- Lista plików
Jeśli chcesz bezpośrednio użyć następujących przykładów kodu, pamiętaj o następujących kwestiach:
Uwzględnij
System.IO
przestrzeń nazw w następujący sposób:using System.IO;
Zadeklaruj zmienną
winDir
w następujący sposób:string winDir=System.Environment.GetEnvironmentVariable("windir");
Funkcja
addListItem
jest zadeklarowana w następujący sposób:private void addListItem(string value) { this.listBox1.Items.Add(value); }
Zamiast deklarować i używać
addListItem
funkcji, możesz użyć następującej instrukcji bezpośrednio:this.listBox1.Items.Add(value);
Odczytywanie pliku tekstowego
Poniższy przykładowy kod używa StreamReader
klasy do odczytania pliku System.ini . Zawartość pliku jest dodawana do kontrolki ListBox. Blok try...catch
jest używany do powiadamiania programu, jeśli plik jest pusty. Istnieje wiele sposobów określania, kiedy zostanie osiągnięty koniec pliku; W tym przykładzie użyto Peek
metody do zbadania następnego wiersza przed jego odczytaniem.
StreamReader reader=new StreamReader(winDir + "\\system.ini");
try
{
do
{
addListItem(reader.ReadLine());
}
while(reader.Peek()!= -1);
}
catch
{
addListItem("File is empty");
}
finally
{
reader.Close();
}
Pisanie pliku tekstowego
Ten przykładowy kod używa StreamWriter
klasy do tworzenia i zapisywania w pliku. Jeśli masz istniejący plik, możesz go otworzyć w taki sam sposób.
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");
Wyświetlanie informacji o pliku
Ten przykładowy kod używa FileInfo
obiektu w celu uzyskania dostępu do właściwości pliku. Notepad.exe jest używany w tym przykładzie. Właściwości są wyświetlane w kontrolce ListBox.
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;
Wyświetlanie listy dysków
Ten przykładowy kod używa Directory
klas i Drive
do wyświetlania listy dysków logicznych w systemie. W tym przykładzie wyniki są wyświetlane w kontrolce ListBox.
string[] drives = Directory.GetLogicalDrives();
foreach(string drive in drives)
{
addListItem(drive);
}
Wyświetlanie listy podfolderów
Ten przykładowy kod używa GetDirectories
metody Directory
klasy, aby uzyskać listę folderów.
string[] dirs = Directory.GetDirectories(winDir);
foreach(string dir in dirs)
{
addListItem(dir);
}
Lista plików
Ten przykładowy kod używa GetFiles
metody Directory
klasy, aby uzyskać listę plików.
string[] files= Directory.GetFiles(winDir);
foreach (string i in files)
{
addListItem(i);
}
Wiele rzeczy może pójść źle, gdy użytkownik uzyska dostęp do plików. Pliki mogą nie istnieć, pliki mogą być używane lub użytkownicy nie mają uprawnień do plików lub folderów, do których próbują uzyskać dostęp. Podczas pisania kodu i obsługi wyjątków, które mogą być generowane, należy wziąć pod uwagę te możliwości.
Przykład krok po kroku
W programie Visual C# utwórz nową aplikację Windows Forms. Domyślnie formularz Form1 jest tworzony.
Otwórz okno kodu formularza Form1 (Form1.cs).
Usuń cały kod w Form1.cs.
Wklej następujący kod w oknie Edytor kodu.
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); } } }
Otwórz okno kodu dla Form1.Designer.cs.
Usuń cały kod w Form1.Designer.cs.
Wklej następujący kod w Form1.Designer.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; } }
Domyślnie program Visual C# dodaje jeden formularz do projektu podczas tworzenia projektu Windows Forms. Ten formularz nosi nazwę Form1. Dwa pliki kodu źródłowego reprezentujące formularz mają nazwę Form1.cs i Form1.Designer.cs. Kod należy napisać w pliku Form1.cs . Program Windows Forms Designer zapisuje kod wygenerowany przez projektanta w pliku Form1.Designer.cs . Kod w poprzednich krokach odzwierciedla organizację.
Naciśnij F5, aby skompilować, a następnie uruchom program. Kliknij przyciski, aby wyświetlić różne akcje. Podczas wyświetlania przykładowego kodu możesz zwinąć obszar o nazwie Wygenerowany kod programu Windows Form Designer, aby ukryć ten kod.