Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Прога - ответы2.docx
Скачиваний:
19
Добавлен:
23.04.2019
Размер:
206.38 Кб
Скачать

Дополнительные члены File

Тип File также поддерживает несколько уникальных членов, которые могут значительно упростить процесс чтения и записи текстовых данных.

ReadAllBytes()

Открывает файл, читает двоичные данные как массив байт, затем закрывает файл

ReadAllLines()

Открывает файл, читает текстовые данные как массив строк, затем закрывает файл

ReadAllText()

Открывает файл, читает текстовые данные одной строкой, затем закрывает файл

WriteAllBytes()

Открывает указанный файл, записывает в него байтовый массив и закрывает файл

WriteAllLines()

Открывает указанный файл, записывает в него массив строк и закрывает файл

WriteAllText()

Открывает файл, записывает в него указанную строку и закрывает файл

Потоковый ввод-вывод

Потоки предоставляют общий способ взаимодействия с последовательностью байт независимо от того, какого рода устройство (файл, сеть, соединение, принтер и т.п.) хранит или отображает эти байты. Концепция потока не ограничена файловым вводом-выводом. Точности ради следует отметить, что библиотеки .NET предоставляют потоковый доступ к сетям, областям памяти и прочим абстракциям, связанным с потоками.

В абстрактном классе System.Stream определен набор членов, которые обеспечивают поддержку синхронного и асинхронного взаимодействия с хранилищем (например, файлом или областью памяти):

CanRead

CanWrite

CanSeek

Определяют, поддерживает ли текущий поток чтение, поиск и/или запись

Close()

Закрывает текущий поток и освобождает все его ресурсы (напрмер, файловые дескрипторы). Внутренне этот метод является псевдонимом Dispose()

Flush()

Если для вывода используется буфер, производит запись буфера и его очистку. Если поток не реализует буфер, метод не делает ничего

Length

Возвращает длину потока в байтах

Position

Определяет текущую позицию в потоке

Read()

ReadByte()

Читает последовательность байт (или одиночный байт) из текущего потока и перемещает текущую позицию потока на количество прочитанных байтов

Seek()

Устанавливает позицию в текущем потоке

SetLength()

Устанавливает длину текущего потока

Write()

WriteByte()

Пишет последовательность байт (или одиночный байт) в текущий поток и перемещает текущую позицию на количество записанных байтов

Работа с классом FileStream

Класс FileStream предоставляет реализацию абстрактного члена Stream в манере, подходящей для потоковой работы с файлами. Это элементарный поток, и он может записывать или читать только один байт или массив байтов.

// Получить объект FileStream.

using ( FileStream fStream = File.Open(@"C:\test.dat", FileMode.Create) )

{

// Закодировать строку в виде массива байт.

string msg = "Hello!";

byte[] byteArray = Encoding.Default.GetBytes(msg);

// Записать byte[] в файл.

fStream.Write(byteArray, 0, byteArray.Length);

// Сбросить внутреннюю позицию потока.

fStream.Position = 0;

// Прочитать из файла и декодировать строку.

byte[] bytesFromFile = new byte[byteArray.Length];

// Прочитаем по байту данные

for ( int i = 0; i < byteArray.Length; i++ )

bytesFromFile[i] = (byte)fStream.ReadByte();

Console.WriteLine(Encoding.Default.GetString(bytesFromFile));

}