| Метод | Описание |
|---|---|
| ReadAllBytes() | Открывает указанный файл, возращает двоичные данные в виде массива байтов, а затем закрывает файл |
| ReadAllLines() | Открывает указанный файл, возращает символьные данные в виде массива строк, а затем закрывает файл |
| ReadAllText() | Открывает указанный файл, возращает символьные данные в виде System.String, а затем закрывает файл |
| WriteAllBytes() | Открывает указанный файл, записывает массив байтов, а затем закрывает файл |
| WriteAllLines() | Открывает указанный файл, записывает массив строк, а затем закрывает файл |
| WriteAllText() | Открывает указанный файл, записывает символьные данные, а затем закрывает файл |
При использовании этих новых методов типа File для чтения и записи пакетов данных потребуется всего несколько строк программного кода. Более того, каждый из указанных новых членов автоматически закрывает соответствующий дескриптор файла, например:
class Program {
static void Main(string[] args) {
string[] myTasks = { "Прочистить сток в ванной", "Позвонить Саше и Сереже", "Позвонить родителям", "Поиграть с ХВох" };
// Записать все данные в файл на диске C.
File.WriteAllLines(@"C:\tasks.txt", myTasks);
// Прочитать все снова и напечатать.
foreach (string task in File.ReadAllLines(@"C:\tasks.txt")) {
Console.WriteLine("Нужно сделать: {0}", task);
}
}
}
Очевидно, когда вы хотите быстро получить дескриптор файла, тип File избавит вас от необходимости ввода нескольких лишних строк. Однако преимущество предварительного создания объекта FileInfo заключается в том, что тогда вы получаете возможность исследовать соответствующий файл с помощью членов абстрактного базового класса FileSystemInfо.
static void Main(string[] args) {
// Вывод информации о файле boot.ini
// с последующим открытием доступа только для чтения.
FileInfo bootFile = new FileInfо(@"C:\boot.ini");
Console.WriteLine(bootFile.CreationTime);
Console.WriteLine(bootFile.LastAccessTime);
FileStream readOnlyStream = bootFile.OpenRead();
readOnlyStream.Close();
}
Абстрактный класс Stream
К этому моменту вы уже видели множество способов получения объектов FileStream, StreamReader и StreamWriter, но вам придется еще читать и записывать данные файлов, связанных с этими типами. Чтобы понять, как это делается, нужно ознакомиться с понятием потока. В "мире" ввода-вывода
Абстрактный класс System.IO.Stream определяет ряд членов, обеспечивающих поддержку синхронного и асинхронного взаимодействия с носителем данных (скажем, с файлом или областью памяти). На рис. 16.6 показано несколько потомков типа Stream.
Рис. 16.6. Типы, производные от Stream
Замечание. Следует знать, что понятие потока применимо не только к файлам или области памяти. Без сомнения, библиотеки .NET обеспечивают потоковый доступ к сетям и другим связанным с потоками абстракциям.
Напомним, что потомки stream представляют данные в виде "сырого" потока байтов, поэтому работа с потоками может быть весьма непонятной. Некоторые относящиеся к Stream типы поддерживают поиск – этот термин, по сути, означает процесс получения он изменения текущей позиции в потоке. Чтобы понять функциональные возможности, предлагаемые классом Stream, рассмотрите его базовые члены, описанные в табл. 16.6.
Таблица 16.6. Абстрактные члены Stream