Cтраница 1
Текущая позиция файла указывает на конец последней записанной или прочитанной строки. Так как длины строк текстового файла заранее неизвестны, определить местонахождение нужной строки можно только последовательным перебором. [1]
True, если текущая позиция файла указывает на конец строки или на конец файла. [2]
Функция FilePos - возвращает текущую позицию файла в записях. [3]
Функция fsetpos устанавливает значение индикатора текущей позиции файла в потоке, на который указывает stream, в соответствии со значением объекта, на который ссылается параметр pos и которое должно быть получено в результате предшествующего вызова функции fgetpos для того же потока. Успешный вызов функции fsetpos очищает индикатор конца файла для потока и отменяет результаты вызова функции ungetc для того же потока. [4]
Запись методом Write проводится в текущую позицию файла, и после записи позиция сдвигается на число записанных байтов. Благодаря этому в приведенном примере каждый вызов в цикле метода Write заносит очередное число на новое место в файле. [5]
После каждой операции чтения или записи текущая позиция файла изменяется, указывая на конец последней считанной или записанной компоненты файла. [6]
Запись и чтение происходят, начиная с текущей позиции файла. После записи или чтения эта текущая позиция сдвигается на число переданных байтов. Имеется функция FileSeek, которая осуществляет сдвиг текущей позиции. Благодаря этому появляется возможность записывать информацию в любую позицию файла и читать ее тоже из любой позиции. [7]
Действие процедуры READLN ( F) заключается в перемещении текущей позиции файла F в позицию непосредственно после маркера конца текущей строки текстового файла F. Если эта позиция не является позицией конца файла, то, следовательно, текущая позиция устанавливается на начало следующей строки. [8]
Обычно доступ к файлам организуется последовательно, т.е., когда некоторая запись считывается с помощью стандартной процедуры Read или записывается с помощью стандартной процедуры Write, текущая позиция файла перемещается к следующей по порядку записи файла. Однако к типизированным и нетипизированным файлам можно организовать прямой доступ с помощью стандартной процедуры Seek, которая перемещает текущую позицию файла к записи с заданным порядковым номером. [9]
После того, как поток TFileStream создан, его свойства Handle, Position и Size дают доступ соответственно к дескриптору потока ( свойство только для чтения), к текущей позиции файла и его размеру. [10]
Функция fputc записывает символ, определенный параметром с и преобразуемый к типу unsigned char, в поток вывода, указанный stream, в позицию, указанную соответствующим индикатором связанного с потоком файла ( если этот индикатор определен), и изменяет значение индикатора текущей позиции файла. Если файл не поддерживает возможности позиционирования или если поток был открыт в режиме добавления, символы добавляются в конец потока вывода. Функция fputc возвращает выведенный символ. [11]
Примечания: Параметр f является файловой переменной, соответствующей любому типу файла, кроме текстового, а каждый элемент v представляет собой переменную того же типа, что и элемент файла Г При каждом считывании в переменную текущая позиция в файле продвигается к следующему элементу. Попытка считывания следующего элемента файла в тот момент, когда текущая позиция файла находится в конце файла ( то есть когда Eof ( f) имеет значение Тше является ошибкой. [12]
Обычно доступ к файлам организуется последовательно, т.е., когда некоторая запись считывается с помощью стандартной процедуры Read или записывается с помощью стандартной процедуры Write, текущая позиция файла перемещается к следующей по порядку записи файла. Однако к типизированным и нетипизированным файлам можно организовать прямой доступ с помощью стандартной процедуры Seek, которая перемещает текущую позицию файла к записи с заданным порядковым номером. [13]
Зная все это, мы теперь можем рассмотреть, как происходит процесс ввода-вывода. Open заставляет систему искать директории по определенному пути. Если поиск успешен, то индексный дескриптор считывается во внутреннюю таблицу. Вызовы read и write требуют, чтобы система вычислила номер блока из текущей позиции файла. Адреса первых 10 блоков диска всегда находятся в основной памяти ( в индексном дескрипторе); для остальных блоков сначала требуется считать один или несколько блоков косвенной адресации. Lseek просто меняет текущую позицию указателя и не производит никакого ввода-вывода. [14]