Odczytywanie i zapisywanie w pliku tekstowym przy użyciu języka Visual C#
Ten artykuł ułatwia odczytywanie i zapisywanie w pliku tekstowym przy użyciu języka Visual C#.
Oryginalna wersja produktu: Visual Studio
Oryginalny numer KB: 816149
Podsumowanie
W sekcji Odczytaj plik tekstowy w tym artykule opisano sposób odczytywania pliku tekstowego za pomocą klasy StreamReader
. W sekcjach Zapisz plik tekstowy (przykład 1) i Zapisz plik tekstowy (przykład 2) opisano, jak używać klasy StreamWriter
do zapisywania tekstu do pliku.
Odczytywanie pliku tekstowego
Poniższy kod używa klasy StreamReader
do otwierania, odczytywania i zamykania pliku tekstowego. Aby automatycznie otworzyć plik, do konstruktora klasy StreamReader
można przekazać ścieżkę dostępu do pliku tekstowego. Ta metoda ReadLine
odczytuje każdy wiersz tekstu i w trakcie odczytu przesuwa wskaźnik pliku do następnego wiersza. Gdy metoda ReadLine
dotrze do końca pliku, zwraca odwołanie null. Aby uzyskać więcej informacji, zobacz artykuł Klasa StreamReader.
Utwórz przykładowy plik tekstowy w programie Notatnik. Wykonaj te kroki:
- Wklej tekst witaj świecie w programie Notatnik.
- Zapisz plik jako Przykład.txt.
Uruchom Microsoft Visual Studio.
W menu Plik wskaż polecenie Nowy, a następnie kliknij opcję Projekt.
Wybierz pozycję Projekty Visual C# w sekcji Rodzaje projektów, a następnie wybierz pozycję Aplikacja konsoli w sekcji Szablony.
Dodaj następujący kod na początku pliku Class1.cs:
using System.IO;
Dodaj do metody
Main
następujący kod:String line; try { //Pass the file path and file name to the StreamReader constructor StreamReader sr = new StreamReader("C:\\Sample.txt"); //Read the first line of text line = sr.ReadLine(); //Continue to read until you reach end of file while (line != null) { //write the line to console window Console.WriteLine(line); //Read the next line line = sr.ReadLine(); } //close the file sr.Close(); Console.ReadLine(); } catch(Exception e) { Console.WriteLine("Exception: " + e.Message); } finally { Console.WriteLine("Executing finally block."); }
W menu Debugowanie wybierz pozycję Rozpocznij, aby skompilować i uruchomić aplikację. Kliknij klawisz ENTER, aby zamknąć okno Konsola. W oknie Konsola wyświetlana jest zawartość pliku Przykład. txt:
Hello world
Zapisywanie pliku tekstowego (przykład 1)
Poniższy kod używa klasy StreamWriter
do otwierania, zapisywania i zamykania pliku tekstowego. Podobnie jak w przypadku klasy StreamReader
, aby otworzyć plik automatycznie, do konstruktora StreamWriter
można przekazać ścieżkę pliku tekstowego. Metoda WriteLine
zapisuje w pliku tekstowym cały wiersz tekstu.
Uruchom program Visual Studio.
W menu Plik wskaż polecenie Nowy, a następnie kliknij opcję Projekt.
Wybierz pozycję Projekty Visual C# w sekcji Rodzaje projektów, a następnie wybierz pozycję Aplikacja konsoli w sekcji Szablony.
Dodaj następujący kod na początku pliku Class1.cs:
using System.IO;
Dodaj do metody
Main
następujący kod:try { //Pass the filepath and filename to the StreamWriter Constructor StreamWriter sw = new StreamWriter("C:\\Test.txt"); //Write a line of text sw.WriteLine("Hello World!!"); //Write a second line of text sw.WriteLine("From the StreamWriter class"); //Close the file sw.Close(); } catch(Exception e) { Console.WriteLine("Exception: " + e.Message); } finally { Console.WriteLine("Executing finally block."); }
W menu Debugowanie wybierz pozycję Rozpocznij, aby skompilować i uruchomić aplikację. Ten kod tworzy plik o nazwie Test.txt na dysku C. Otwórz plik Test.txt w edytorze tekstu, takim jak Notatnik. Plik Test.txt zawiera dwa wiersze tekstu:
Hello World!! From the StreamWriter class
Pisanie pliku tekstowego (przykład 2)
Poniższy kod używa klasy StreamWriter
do otwierania, zapisywania i zamykania pliku tekstowego. W przeciwieństwie do poprzedniego przykładu ten kod przekazuje dwa dodatkowe parametry do konstruktora. Pierwszy parametr to ścieżka pliku i nazwa pliku. Drugi parametr, true
, określa, że plik jest otwierany w trybie dołączania. Jeśli jako drugi parametr zostanie określona wartość false
, zawartość pliku będzie nadpisywana przy każdym uruchomieniu kodu. Trzeci parametr określa Unicode
, aby StreamWriter
kodował plik w formacie Unicode. Dla trzeciego parametru można również określić następujące metody kodowania:
- ASC11
- Unicode
- UTF7
- UTF8
Metoda Write
jest podobna do metody WriteLine
, z tą różnicą, że metoda Write
nie osadza automatycznie powrotu karetki ani kombinacji znaków wiersza (CR/LF). Jest ona przydatna, gdy zachodzi potrzeba pisania jednego znaku na raz.
Uruchom program Visual Studio.
W menu Plik wskaż polecenie Nowy, a następnie kliknij Projekt.
Kliknij Projekty Visual C# w sekcji Rodzaje projektów, a następnie kliknij Aplikacja konsoli w sekcji Szablony.
Dodaj następujący kod na początku pliku Class1.cs:
using System.IO; using System.Text;
Dodaj do metody
Main
następujący kod:Int64 x; try { //Open the File StreamWriter sw = new StreamWriter("C:\\Test1.txt", true, Encoding.ASCII); //Write out the numbers 1 to 10 on the same line. for(x=0; x < 10; x++) { sw.Write(x); } //close the file sw.Close(); } catch(Exception e) { Console.WriteLine("Exception: " + e.Message); } finally { Console.WriteLine("Executing finally block."); }
W menu Debugowanie wybierz pozycję Rozpocznij, aby skompilować i uruchomić aplikację. Ten kod tworzy plik o nazwie Test1.txt na dysku C. Otwórz plik Test1.txt w edytorze tekstu, takim jak Notatnik. Plik Test1.txt zawiera jeden wiersz tekstu: 0123456789.
Pełna lista kodów do odczytu pliku tekstowego
//Read a Text File
using System;
using System.IO;
namespace readwriteapp
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
String line;
try
{
//Pass the file path and file name to the StreamReader constructor
StreamReader sr = new StreamReader("C:\\Sample.txt");
//Read the first line of text
line = sr.ReadLine();
//Continue to read until you reach end of file
while (line != null)
{
//write the line to console window
Console.WriteLine(line);
//Read the next line
line = sr.ReadLine();
}
//close the file
sr.Close();
Console.ReadLine();
}
catch(Exception e)
{
Console.WriteLine("Exception: " + e.Message);
}
finally
{
Console.WriteLine("Executing finally block.");
}
}
}
}
Pełna lista kodów do odczytu pliku tekstowego (wersja 1)
//Write a text file - Version-1
using System;
using System.IO;
namespace readwriteapp
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
try
{
//Pass the filepath and filename to the StreamWriter Constructor
StreamWriter sw = new StreamWriter("C:\\Test.txt");
//Write a line of text
sw.WriteLine("Hello World!!");
//Write a second line of text
sw.WriteLine("From the StreamWriter class");
//Close the file
sw.Close();
}
catch(Exception e)
{
Console.WriteLine("Exception: " + e.Message);
}
finally
{
Console.WriteLine("Executing finally block.");
}
}
}
}
Kompletna lista kodu dotycząca sposobu pisania pliku tekstowego (wersja 2)
//Write a text file - Version 2
using System;
using System.IO;
using System.Text;
namespace readwriteapp
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
Int64 x;
try
{
//Open the File
StreamWriter sw = new StreamWriter("C:\\Test1.txt", true, Encoding.ASCII);
//Writeout the numbers 1 to 10 on the same line.
for(x=0; x < 10; x++)
{
sw.Write(x);
}
//close the file
sw.Close();
}
catch(Exception e)
{
Console.WriteLine("Exception: " + e.Message);
}
finally
{
Console.WriteLine("Executing finally block.");
}
}
}
}
Rozwiązywanie problemów
W przypadku wszystkich operacji na plikach dobrą praktyką programistyczną jest umieszczanie kodu wewnątrz bloku try-catch-finally
w celu obsługi błędów i wyjątków. W szczególności warto zwolnić obsługę pliku w ostatnim bloku, aby plik nie został zablokowany na czas nieokreślony. Niektóre możliwe błędy to plik, który nie istnieje lub plik, który jest już w użyciu.