Функции чтения-записи с использованием указателя

Режимы "r+", "w+" и "a+" для текстовых файлов и режимы "r+b", "w+b" и "a+b" – для двоичных файлов, заданные в функции fopen(), позволяют переходить от чтения файла к записи в файл, не открывая файл повторно. При использовании этих режимов файл рассматривается как массив. Начало позиции считывания или записи задается с помощью указателя. Использование указателя позволяет обеспечить как последовательный доступ к данным (после считывания или записи очередного поля данных указатель автоматически перемещается на начало следующего поля данных), так и произвольный доступ к данным в файле (когда указатель перемещается прямо к началу нужного поля данных).

Функция

int ftell(int fp)

возвращает текущее смещение указателя чтения/записи от начала файла, либо значение false, если при выполнении функции произошла ошибка.

Функция

int fseek(int fp, int offset [, int whence])

устанавливает указатель в заданную параметрами offset и whence позицию. Параметр whence может принимать следующие значения:

· SEEK_SET – установить указатель в позицию offset от начала файла;

· SEEK_CUR – установить указатель в позицию offset от текущего поло­жения;

· SEEK_END – установить указатель в позицию offset от конца файла.

По умолчанию параметр whence принимает значение SEEK_SET. Параметр offset может принимать как положительные, так и отрицательные значения.

В случае успешного выполнения функции возвращается значение 0. В случае неуспеха (в том числе и установка указателя за пределы файла) — значение -1.

Данная функция неприменима к файлам, открытым по протоколам HTTP и FTP.

Функция

bool rewind(int fp)

устанавливает указатель на начало файла. В случае успешного выполнения функции возвращается значение true, в противном случае – значение false.

Пример 4.6.150. Использование произвольного доступа к данным в файле:

В этом фрагменте программы доступ и изменение данных в файле Variables.txt, являющимся копией файла Variables.txt, созданного в примере 4.6.142, выполняется в режиме произвольного доступа:

// Переход в каталог "D:/PHPData/"

chdir("D:/PHPData/");

// Копирование файла Variables.txt в Variables1.txt

copy("Variables.txt", "Variables1.txt");

// Открытие файла Variables1.txt

// для чтения и записи

$modFile = fopen("D:/PHPData/Variables1.txt", "r+");

// Установка указателя в позицию 6

// относительно начала файла

fseek($modFile, 6);

// Получение и вывод значения переменной $b

$b = fread($modFile, 8);

print "\$b='$b'";

// Получение и вывод текущей позиции указателя

$currentPos = ftell($modFile);

print "\n\$currentPos=$currentPos";

// Возврат указателя на 8 позиций назад

fseek($modFile, -8, SEEK_CUR);

// Задание нового значения $b

$newB = 16.4;

// Запись нового значения $b в файл

fprintf($modFile, "%8.2e",$newB);

// Возврат указателя в начало файла

rewind($modFile);

// Установка указателя в позицию 31

// относительно начала файла

fseek($modFile, 31, SEEK_SET);

// Получение и вывод значения переменной $e

$e = fread($modFile, 6);

print "\n\$e='$e'";

// Задание нового значения $e

$NewE = 'string';

// Возврат указателя на 6 позиций назад

fseek($modFile, -6, SEEK_CUR);

// Запись нового значения $e в файл

fprintf($modFile, "%6s",$NewE);

В результате выполнения этого фрагмента выводятся следующие строки:


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: