Закрытие текстовых файлов

Когда вы закончили работать с текстовым файлом (т.е. закончили считывать из него или запсывать в него), вы должны закрыть его. Закрытие файла дает гарантию того, что любые данные, которые были помещены в буфер внутренними механизмами Delphi (или операционной системы), действительно были записаны на диск, что предотвращает разрушение файловой системы. Чтобы закрыть файл, не зависимо от того, был ли он открыт для чтения, или для записи, вы просто вызываете процедуру Close (Закрыть), подобно следующему:

Close(MyTextFile);

И здесь мы попадаем в круг проблем, связанных с модулями, котрых Джеф кратко коснулся в Главе 8. Если припоминаете, объект TForm имеет процедуру Close, которая вызывается для закрытия формы и, в приложениях, обладающих одной единственной формой, завершает выполнение. Поскольку процедура Close для формы определяется после стандартной файловой процедуры Close, Close для TForm оказывается "в области действия" и видима по умолчанию, без каких либо дополнительных уточнений. (Послед нее определение с данным именем является видимым по умолчанию - и это позволяет вам изменять существующие идентификаторы, замещая их своими собственными.) По этой причине вы получите ошибку времени компиляции, если напишете вышеприведенную строку кода где-либо в процедуре формы, поскольку компилятор думает, что вы вызываете TFormClose, которая не получает параметра. Решение заключается в использовании "точечной" системы обозначения- модуль.процедура- для полного определения ссылки путём точного специфицирования, какую Close вы хотите вызвать. Поскольку Close определена в модуле System, вы должны записать:

System.Close (MyTextFile);

В соответствии с документацией, Delphi автоматически закрывает все открытые файлы во время выполнения своей процедуры выхода. Замечательно, что Delphi делает это, но зависимость от языка, который вы используете, для автоматического закрытия файла - не самый лучший способ в программировании. Это является, также, приглашением к неприятностям, если вы когда-либо попытаетесь перенести код на другую платформу, которая не закрывает автоматически открытые файлы. Если же вы делаете это сами, то, по крайней мере, уверены, что это сделано.

Большей проблемой является проблема логических номеров файлов - указателей файлов, которые являются внутренними для Windows. В зависимости от вашей конкретной установки на время загрузки, когда запускается ваша программа Delphi, она предоставляет для работы от 15 до 20 логических номеров файлов. (Имеются способы получения и большего числа логических номеров файлов - до 255 - но это предмет для более обширной книги.) Каждый открытый файл требует одного логических номеров файла, что означает, что у вас имеется ограничение на число файлов, которые вы можете иметь открытыми в каждый конкретный момент времени. Если вы открываете файлы и не заакрываете их после окончания работы с ними, то вашей программе скоро не хватит логических номеров файлов. Но если вы закрываете файл, закончив с ним работать, это высвобождает логический номер файла, которая может быть снова использована, когда вы открываете другой файл.


⇐ Предыдущая страница| |Следующая страница ⇒

Программирование в среде Delphi



Новости за месяц

  • Декабрь
    2021
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31