Использование Visual C# для чтения и записи в текстовый файл
В этой статье описано, как выполнить чтение и запись в текстовый файл с помощью Visual C#.
Оригинальная версия продукта: Visual Studio
Оригинальный номер базы знаний: 816149
Сводка
В разделе Чтение текстового файла этой статьи описывается, как использовать класс StreamReader
для чтения текстового файла. В разделах Запись в текстовый файл (пример 1) и Запись в текстовый файл (пример 2) описывается, как использовать класс StreamWriter
для записи текста в файл.
Чтение текстового файла
В следующем коде используется класс StreamReader
для открытия, чтения и закрытия текстового файла. Можно передать путь к текстовому файлу в конструктор StreamReader
для автоматического открытия файла. Метод ReadLine
считывает каждую строку текста и перемещает указатель файла на следующую строку по мере чтения. Если метод ReadLine
достигает конца файла, он возвращает пустую ссылку. Дополнительные сведения см. в разделе Класс StreamReader.
Создайте пример текстового файла в Блокноте. Выполните приведенные ниже действия.
- Вставьте текст hello world в Блокнот.
- Сохраните файл как Sample.txt.
Запустите Microsoft Visual Studio.
В меню Файл выберите пункт Создать, а затем выберите Проект.
Выберите Проекты Visual C# в разделе Типы проектов, а затем выберите Консольное приложение в разделе Шаблоны.
Добавьте следующий код в начало файла Class1.cs:
using System.IO;
Добавьте указанный ниже код в метод
Main
: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."); }
В меню Отладка выберите Пуск для компиляции и запуска приложения. Нажмите клавишу ВВОД, чтобы закрыть окно консоли. В окне консоли отображается содержимое файла Sample.txt:
Hello world
Запись в текстовый файл (пример 1)
В следующем коде используется класс StreamWriter
для открытия, записи и закрытия текстового файла. Аналогично тому, как используется класс StreamReader
, можно передать путь к текстовому файлу в конструктор StreamWriter
для автоматического открытия файла. Метод WriteLine
записывает всю текстовую строку в текстовый файл.
Запустите Visual Studio.
В меню Файл выберите пункт Создать, а затем выберите Проект.
Выберите Проекты Visual C# в разделе Типы проектов, а затем выберите Консольное приложение в разделе Шаблоны.
Добавьте следующий код в начало файла Class1.cs:
using System.IO;
Добавьте указанный ниже код в метод
Main
: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."); }
В меню Отладка выберите Пуск для компиляции и запуска приложения. Этот код создает файл с именем Test.txt на диске C. Откройте Test.txt в текстовом редакторе, например в Блокноте. Test.txt содержит две текстовые строки:
Hello World!! From the StreamWriter class
Запись в текстовый файл (пример 2)
В следующем коде используется класс StreamWriter
для открытия, записи и закрытия текстового файла. В отличие от предыдущего примера, этот код передает в конструктор два дополнительных параметра. Первый параметр — путь к файлу и имя файла. Второй параметр, true
, указывает, что файл открыт в режиме добавления. Если вы задаете false
для второго параметра, содержимое файла перезаписывается при каждом запуске кода. Третий параметр задает Unicode
, чтобы кодирование файла в StreamWriter
выполнялось в формате Юникода. Можно также указать следующие методы кодирования для третьего параметра:
- ASC11
- Юникод
- UTF7
- UTF8
Метод Write
аналогичен методу WriteLine
, за исключением того, что метод Write
не вставляет автоматически сочетание символов возврата каретки или перевода строки (CR/LF). Это полезно, когда нужно одновременно записывать по одному символу.
Запустите Visual Studio.
В меню Файл выберите пункт Создать и затем пункт Проект.
Нажмите Проекты Visual C# в разделе Типы проектов, а затем нажмите Консольное приложение в разделе Шаблоны.
Добавьте следующий код в начало файла Class1.cs:
using System.IO; using System.Text;
Добавьте указанный ниже код в метод
Main
: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."); }
В меню Отладка выберите Пуск для компиляции и запуска приложения. Этот код создает файл с именем Test1.txt на диске C. Откройте Test1.txt в текстовом редакторе, например в Блокноте. Test1.txt содержит одну текстовую строку: 0123456789.
Полный код сборки для чтения текстового файла
//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.");
}
}
}
}
Полный код сборки для записи в текстовый файл (версия 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.");
}
}
}
}
Полный код сборки для записи в текстовый файл (версия 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.");
}
}
}
}
Устранение неполадок
Перенос кода в блок try-catch-finally
для обработки ошибок и исключений является хорошей практикой программирования, когда речь заходит о выполнении любых операций с файлом. В частности, может потребоваться освободить дескрипторы файла в окончательном блоке, чтобы файл не был заблокирован на неопределенный срок. Некоторые возможные ошибки включают файл, который не существует, или файл, который уже используется.