Поиск

Произвольный доступ к файлу

В предыдущем абзаце, когда мы рассматривали добавление и удаление строк из базы данных, был продемонстрирован один из способов произвольного доступа к файлам. Однако подобный метод нельзя назвать абсолютно безопасным для сохранности данных. Поэтому в следующих разделах мы вкратце рассмотрим несколько средств для чтения и записи файлов с произвольным доступом. Следует отметить, что используются они в программах достаточно редко.

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

До сих пор мы говорили о трех методах открытия файлов — для чтения, записи и добавления информации в конец файла. Кроме того, файлы можно открывать одновременно и для чтения, и для записи. Возможные режимы открытия файлов перечислены в табл. 15.1.

А теперь несколько замечаний.

  • По возможности следует избегать использования режимов, при которых информация добавляется в конец файла. В некоторых системах, в частности в UNIX, данные, записываемые в файл, всегда помешаются в его конец, независимо от значения текущего указателя. (О том, что такое указатель, мы поговорим ниже.)
  • Никогда не следует использовать режим +>, поскольку при открытии файла его содержимое всегда стирается.
Перемещение по файлу при выполнении операции чтения или записи

При работе с файлом операционная система обычно отслеживает текущее место в нем, из которого должны быть прочитаны или в которое должны быть записаны данные при выполнении следующей операции чтения/записи. Это место называется указателем текущей позиции в файле, или просто текущим указателем файла. Например, при открытии файла для чтения текущий указатель файла устанавливается в его начало, как показано ниже.

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

Для перемещения текущего указателя в произвольное место файла используется функция seek. Она имеет три аргумента: первый — дескриптор открытого файла, второй — смещение в файле, определяющее новое положение текущего указателя. Последний аргумент определяет относительное положение указанного смещения: 0 — относительно начала файла, 1 — относительно текущей позиции указателя файла, 2 — относительно конца файла. Ниже приведено несколько примеров использования функции seek().

Чтобы узнать текущую позицию указателя в файле, используется функция tell. Например, после выполнения фрагмента предыдущего кода функция tell(F) вернет значение 16 (длина строки "Это начало файла"). Так происходит потому, что указатель располагается в файле сразу за последней порцией выведенных данных.

В этом разделе мы только поверхностно коснулись функций seek, tell и open, предназначенных для работы с файлами с произвольным доступом. За более подробной информацией обращайтесь к электронной документации. Перечисленные выше функции описаны в разделе perlfunc документации по Perl. Для доступа к нему введите команду perldoc perlfunc. Кроме того, дополнительную информацию по использованию функции open можно найти в разделе perlopentut документации по Perl. Для доступа к нему введите команду perldoc perlopentut.