
- •11. Организация работы с файлами
- •11.1. Использование стандартных диалоговых окон открытия и сохранения файлов
- •11.2. Использование стандартного диалогового окна обзора папок
- •11.3. Использование класса System.Io.File для работы с файлами
- •If (!File.Exists(path))
- •If (!File.Exists(path))
- •If (!File.Exists(path))
- •If (!File.Exists(path))
- •If (!File.Exists(path))
- •11.4. Использование класса System.Io.Directory для работы с папками
- •If (Directory.Exists(currentDir)) // Если папка существует
- •If (Directory.Exists(sourceDir) & Directory.Exists(destDir) &
- •If (Directory.Exists(destDir)) // Если папка существует
- •11.5. Использование класса System.Io.Path для работы со строкой пути к папке или файлу
- •If (Path.HasExtension(path1))
- •If (!Path.HasExtension(path2))
- •If (!Path.IsPathRooted(path3))
- •11.6. Использование класса System.Io.FileInfo для работы с файлами
- •If (!fi1.Exists)
- •11.7. Использование класса System.Io.DirectoryInfo для работы с файлами и папками
- •If (cd.Exists) // Если заданная папка существует...
- •If (sd.Exists & dd.Exists & !md.Exists)
- •If (dd.Exists) // Если папка существует
- •11.8. Использование класса System.Io.DriveInfo для работы с дисками
- •11.9. Использование класса System.Io.FileStream для работы с файлами
- •If (fs.CanRead && fs.CanWrite)
- •11.10. Использование классов System.Io.StreamReader и System.Io.StreamWriter для работы с файлами
11.10. Использование классов System.Io.StreamReader и System.Io.StreamWriter для работы с файлами
(http://msdn.microsoft.com/ru-ru/library/system.io.streamreader.aspx)
(http://msdn.microsoft.com/ru-ru/library/system.io.streamwriter.aspx)
Форматы объявления объектов StreamReader и StreamWriter:
StreamReader sr = new StreamReader(fileName, [encoding],
[detectEncoding], [bufferSize]);
StreamWriter sw = new StreamWriter(fileName, [append], [encoding],
[bufferSize]);
где:
fileName – строка, содержащая полное имя файла, связанного с объектом StreamReader;
append – определяет, будет ли указанный файл перезаписан (false), либо данные в него будут добавлены (true). Если указанный файл не существует, этот параметр не используется и создается новый файл;
encoding – кодировка символов, которую нужно использовать (одно из свойств класса System.Text.Encoding, таблица 11.6);
detectEncoding – определяет, необходимо ли осуществлять поиск меток порядка следования байтов в начале файла (true или false). Для обнаружения просматриваются первые три байта потока. Автоматически распознается текст в кодировке UTF-8, Unicode с прямым и обратным порядком следования байтов. В противном случае используется кодировка, определяемая пользователем;
bufferSize – значение (Int32, большее 0), определяющее минимальный размер буфера в байтах (задается в 16-разрядных символах). Если заданное значение меньше минимального допустимого размера (128 символов), то используется минимальный допустимый размер.
Таблица 11.16. Основные свойства и методы класса StreamReader из пространства имен System.IO
Имя |
Описание |
Свойства |
|
BaseStream |
Возвращает основной поток. |
CurrentEncoding |
Получает текущую кодировку символов, используемую текущим объектом StreamReader. |
EndOfStream |
Получает значение, определяющее, находится ли текущая позиция потока в его конце. |
Методы |
|
Close(); |
Закрывает объект StreamReader и основной поток и освобож-дает все системные ресурсы, связанные с устройством чтения. |
DiscardBufferedData(); |
Очищает внутренний буфер объекта StreamReader. |
Peek(); |
Возвращает целое число, представляющее следующий символ для чтения (позицию ввода), или значение -1 (если доступных для чтения символов нет или поток не поддерживает поиск). |
Read();
Read(arrCh,i,n); |
Выполняет чтение следующего символа из входного потока и перемещает положение символа на одну позицию вперед. Считывает в буфер (arrCh) заданное максимальное количество (n) символов из текущего потока, начиная с заданного индекса (i). |
ReadBlock(arrCh,i,n); |
Считывает заданное максимальное количество (n) символов из текущего потока, начиная с заданного индекса (i), и записывает данные в буфер (arrCh). |
ReadLine(); |
Выполняет чтение строки символов из текущего потока и возвращает данные в виде строки или null (если достигнут конец входного потока). |
ReadToEnd(); |
Считывает поток, начиная с текущей позиции ввода и до его конца. |
Таблица 11.17. Основные свойства и методы класса StreamWriter из пространства имен System.IO
Имя |
Описание |
Свойства |
|
AutoFlush |
Получает или задает значение, определяющее, будет ли StreamWriter сбрасывать буфер в основной поток после каждого вызова StreamWriter.Write(). |
Encoding |
Получает кодировку Encoding, в которой осуществляется запись выходных данных. |
NewLine |
Получает или задает признак конца строки, используемой текущим TextWriter. |
Методы |
|
Close(); |
Закрывает текущий объект StreamWriter (файл) и базовый поток. |
Write(v); Write(sf,v1); Write(sf,v1,v2); Write(sf,v1,v2,v3); Write(sf,v[]); Write(arrCh); Write(arrCh,i,n); |
Записывает в текстовый файл 1, 2 или 3 объекта (v – числового, строкового, символьного или логического типа) или массива объектов(v[]) в соответствии с заданным форматом (sf).
Записывает в текстовый файл n символов, начиная с i-го, из массива символов (arrCh). |
WriteLine(v); WriteLine(sf,v1); WriteLine(sf,v1,v2); WriteLine(sf,v1,v2,v3); WriteLine(sf,arrV); WriteLine(arrCh); WriteLine(arrCh,i,n); |
Записывает в текстовый файл 1, 2 или 3 объекта (v – числового, строкового, символьного или логического типа) или массива объектов(arrV) в соответствии с заданным форматом (sf). В завершении выводится признак конца строки. Записывает в текстовый файл n символов, начиная с i-го, из массива символов (arrCh). |
Пример 11.17. Использование объектов StreamWriter и StreamReader соответственно для записи строк в текстовый файл (метод WriteLine), а затем чтения строк из него (метод ReadLine).
using System;
using System.IO;
class TestStreamReader
{ public static void Main()
{ string fname = @"c:\temp\Test.txt";
// Создание экземпляра класса StreamWriter для записи в файл
StreamWriter sw = new StreamWriter(fname);
// Запись строк в файл
for (int i=1; i<5; i++)
sw.WriteLine("Test {0}", i);
Console.WriteLine("Файл " + fname + " записан.");
sw.Close(); // Закрытие файла
Console.ReadLine();
// Создание экземпляра класса StreamReader для чтения из файла
StreamReader sr = new StreamReader(fname);
// Чтение и отображение строк из файла, до достижения его конца
string line;
while ((line = sr.ReadLine()) != null)
Console.WriteLine(line);
sr.Close(); // Закрытие файла
Console.ReadLine();
}
}
/* Вывод:
Файл c:\temp\Test.txt записан.
Test 1
Test 2
Test 3
Test 4
*/
В этом примере чтение и отображение строк из файла можно реализовать и иначе, результат при этом не изменится.
while (sr.Peek() > -1) // или while (!sr.EndOfStream)
Console.WriteLine(sr.ReadLine());
или
while (sr.Peek() >= 0) // или while (!sr.EndOfStream)
Console.Write((char)sr.Read());
или
Console.WriteLine(sr.ReadToEnd());
или
char[] c = null;
c = new char[32];
sr.Read(c, 0, c.Length);
Console.WriteLine(c);