Курсовая работа: Потоки TStream, TFileStream, TMemoryStream

fmShareExciusive — файл недоступен для открытия другими приложениями;

fmShareDenyWrite — другие приложения могут читать данные из файла;

fmShareDenyRead — другие приложения могут писать данные в файл;

fmShareDenyNone — другие приложения могут производить с файлом любые операции. Создание потока аналогично примеру, рассмотренному в листинге 1.

Подробнее познакомимся с методами чтения, записи и внутренней структурой файла. Начнем со структуры. Когда вы открыли файл, позиция курсора устанавливается в самое начало и любая попытка чтения или записи будет происходить в эту позицию курсора. Если вам надо прочитать или записать в любую другую позицию, то надо передвинуть курсор. Для этого используется Метод Seek. "Точка отсчета" позиции зависит от значения параметра

Origin: soFromBeginning — смещение должно быть положительным и отсчитывается от начата потока;

soFromCurrent — смещение относительно текущей позиции в потоке;

soFromEnd — смещение должно быть отрицательным и отсчитывается от конца потока.

Не забывайте, что один байт - это один символ. Единственное исключение - файлы в формате Unicode. В них один символ занимает 2 байта.

Таким образом, надо учитывать, в каком виде хранится информация в файле.

Итак, если вам надо передвинуться на 10 символов от начала файла, можете написать следующий код:

Stream.Seek(10, SoFromBeginning) ;

Метод seek всегда возвращает смещение курсора от начала файла. Этим можно воспользоваться, чтобы узнать, где мы сейчас находимся, а можно и узнать общий размер файла. Если переместиться в конец файла, то функция вернет количество байт от начала до конца, т. е. полный размер файла.

В следующем примере устанавливается позиция в файле на 0 байт от конца, т. е. в самый конец. Тем самым получается полный размер файла:

Размер файла := Stream.Seek(0, soFromEnd);

Для чтения из файла нужно использовать метод Read. У этого метода два параметра:

1. Переменная, в которую будет записан результат чтения;

2. Количество байт, которые надо прочитать.

В листинге 2 рассмотрим пример чтения из файла с 20-й позиции

Листинг 2 – Чтения из файла, начиная с 20-й позиции.

Var Stream: TFileStream; //Переменная типа объект TFileStream. buf: array[0..10] of char; // Буфер для хранения прочитанных данных

begin // Далее открываем файл “Sample.wrk”. Stream:= TFileStream.Create('c:\Sample.wrk, fmOpenReadWrite); Stream.Seek(20, soFromBeginning); // Перемещениена20 символоввперед. Stream.Read(buf, 5); // Чтение 5 символов из установленной позиции. Stream.Free; // Очистка потока.

end;

Метод Read возвращает количество реально прочитанных байт (символов).

Если не произошло никаких проблем, то это число должно быть равно количеству запрошенных для чтения байт. Есть только два случая, когда эти числа отличаются:

1. При чтении был достигнут конец файла и дальнейшее чтение стало невозможным;

2. Ошибка на диске или любая другая проблема.

Для чтения применяется метод write. У него два параметра :

1. Переменная, содержимое которой нужно записать;

К-во Просмотров: 218
Бесплатно скачать Курсовая работа: Потоки TStream, TFileStream, TMemoryStream