![](/user_photo/2706_HbeT2.jpg)
- •1 Файлы и потоки
- •2 Потоки данных и классы
- •2.1 Стандартные потоки
- •2.2 Базовые классы для работы с файлами и потоками
- •2.2.1 Основные классы ввода и вывода
- •2.2.2 Классы на базе FileSystemInfo
- •2.2.3 Классы для работы с потоками
- •2.2.4 Классы для работы с потоками текстовых символов
- •2.3 Перечисления
- •3 Работа со стандартными потоками
- •3.1 Стандартный поток ввода
- •3.2 Стандартный поток вывода
- •3.2.1 Стандартный поток вывода сообщений об ошибках
- •3.3 Программа StdStreams
- •4 Создание потоков, связанных с файлами
- •4.1 Открытие потока FileStream
- •4.2 Открытие потоков BinaryWriter и BinaryReader
- •4.3 Закрытие потоков
- •4.4 Запись двоичных данных
- •4.5 Чтение двоичных данных
- •4.6 Программа Binary
- •4.7 Работа с текстовыми файлами
- •5 Выбор кодировки символов
- •5.1 Кодовые страницы
- •5.2 Недостатки модели кодовых страниц
- •5.3 Стандарт UNICODE
- •5.3.1 Unicode в Microsoft Windows NT/2000/XP
- •5.3.2 UNICODE в Microsoft Windows 95
- •5.4 Кодировка текстовых потоков
- •5.5 Кодировка текстовых строк в двоичных потоках
- •6 Буферизация потоков
- •6.1 Буферизация двоичных потоков
- •6.2 Буферизация текстовых потоков
- •6.3 Принудительный сброс буферов
- •7 Потоки в оперативной памяти
- •7.1 Создание потока
- •7.2 Чтение данных
- •7.3 Запись данных
- •7.4 Доступ к буферу потока MemoryStream
- •7.5 Потоки на базе строк string
- •7.6 Потоки класса StringBuilder
- •8 Краткие выводы
- •8.1 Создание и чтение бинарного файла
- •8.2 Создание текстового файла
- •8.3 Добавление в текстовый файл
- •8.4 Чтение и запись в файл строк на русском языке
- •8.5 Посимвольное чтение текстового файла
- •8.6 Построчное чтение текстового файла
- •8.7 Чтение файла полностью
![](/html/2706/211/html_GKjIcfBniA.usgW/htmlconvd-43pxFj38x1.jpg)
8 Краткие выводы
8.1 Создание и чтение бинарного файла
Для создания бинарного файла можно использовать класс Binarywriter:
// Создаем бинарный поток для записи файла
FileStream fs = new FileStream(FileName, FileMode.CreateNew);
BinaryWriter w = new BinaryWriter(fs); // Записываем данные в файл
for (int i = 0; i < 11; i++)
{
w.Write ( (int) i);
)
//Закрываем файл w.Close();
//fs.CloseO; не требуется, будет вызван автоматически!
Чтение бинарного файла производится с помощью класса BinaryReader:
// Создание бинарного потока для чтения файла
fs = new FileStream(FileName, FileMode.Open, FileAccess.Read); BinaryReader r = new BinaryReader (fs);
//Читаем данные из файла
for (int i = 0; i < 11; i++)
{
Console.WriteLine(r.ReadInt32());
}
//Закрываем поток
r.Close О;
//fs.Close(); не требуется, будет вызван автоматически!
8.2Создание текстового файла
Создание текстового файла проще всего выполнить с помощью класса StreamWriter:
using (StreamWriter sw = new StreamWriter("TestFile.txt"));
{
// Добавляем строки файла sw.Write("Первая"); sw.WriteLine("строка файла."); sw.WriteLine("Вторая строка файла");
}
Кроме того, можно использовать метод CreateText класса System.IO.File:
StreamWriter sw = File.CreateText(FILE_NAME); sw.WriteLine ("Первая строка");
sw.WriteLine ("Можно записать в файл int {0} или floats {1}",1, 4.2); sw.Close();
Отличие первого способа от второго заключается еще и в использовании оператора using, В первом случае закрытие потока произойдет автоматически при выходе за границу жизни sw, т. е. при выходе из границы using. Во втором случае требуется обязательный вызов метода Close(). При записи больших объемов данных может потребоваться вызов метода Flush().
![](/html/2706/211/html_GKjIcfBniA.usgW/htmlconvd-43pxFj39x1.jpg)
8.3 Добавление в текстовый файл
Для добавления текста в текстовый файл предназначен метод AppendText класса StreamWriter, экземпляр которого возвращает метод File.AppendText:
StreamWriter sw;
swFile.AppendText ("C:\\MyTextFile.txt"); sw.WriteLine("new line");
sw.Close();
8.4 Чтение и запись в файл строк на русском языке
При записи строк на русском языке необходимо указывать соответствующую кодировку:
System.IO.StreamWriter sw = new System.IO.StreamWriter("test.txt",false);
System. Text.Encoding.GetEncoding(1251)); sw.WriteLine("Строка");
sw.Close ();
8.5 Посимвольное чтение текстового файла
Посимвольное чтение текстового файла осуществляется с помощью метода Read() класса StreamReader. Если достигнут конец файла, метод возвращает -1.
Метод Реек() выполняет те же действия, что и Read(), но при этом не передвигает указатель файла. Класс StreamReader находится в пространстве имен System.IO.
using System; using System.IO;
namespace ReadFilel
{
class Classl [STAThread]
static void Wain(string[J args)
{
// Создать объект для чтения файла
StreamReader reader; try
{
reader = new StreamReader("input.txt");
}
catch
{
// При открытии файла получили исключение Console.WriteLine("Ошибка открытия файла"); return;
}
// Посимвольное чтение файла int ch;
while ((ch = reader.Read()) != -1)
{
Console.WriteLine(ch);
}
}
}
}
![](/html/2706/211/html_GKjIcfBniA.usgW/htmlconvd-43pxFj40x1.jpg)
8.6 Построчное чтение текстового файла
Построчное чтение текстового файла осуществляется с помощью метода ReadLine() класса System.IO.StreamReader. Если достигнут конец файла, метод возвращает null.
FileStream fs = new FileStream( @"с:\test.txt", FileMode.Open, FileAccess.Read); StreamReader sr = new StreamReader( fs );
string curLine = String.Empty;
while ( (curLine = sr.ReadLine()) != null )
{
Console.WriteLine( curLine );
}
sr.Close();
8.7 Чтение файла полностью
Текстовый файл можно полностью загрузить в строку c помощью метода ReadToEnd() класса System.IO.StreamReader. Если достигнут конец файла, возвращает null.