Типизированные файлы
Типизированные файлы являются двоичными файлами, содержащими последовательность однотипных данных. Объявление файловых переменных таких файлов имеет вид:
var <имя файловой переменной>: file of <тип данных>;
Например:
var F: file of real;
Процедуры чтения и записи Read и Write не отличаются от соответствующих процедур для текстовых файлов. Процедур, аналогичных Readln и Writeln, для типизированных файлов нет. Зато есть процедура Seek, позволяющая перемещаться по файлу не только последовательно, как в текстовых файлах, но сразу переходить к требуемому элементу. Имеется также функция FilePos, которая возвращает текущую позицию в файле.
Нетипизированные файлы
Нетипизированные файлы - это двоичные файлы, которые могут содержать самые различные данные в виде последовательности байтов. Программист при чтении этих данных сам должен разбираться, какие байты к чему относятся.
Тип файловой переменной нетипизированного файла объявляется следующим образом:
var <имя файловой переменной>: file;
Открытие нетипизированных фалов осуществляется процедурами Reset и Rewrite, синтаксис которых несколько отличен от аналогичных процедур для других видов файлов тем, что в этих процедурах указывается размер одной записи в байтах. Вместо процедур записи и чтения Read и Write в нетипизированных файлах имеются процедуры BlockRead и BlockWrite, которые читают или записывают указанное в них число записей.
BlockRead (var F: File; var Buf; Count: Integer [; var Result: Integer]) - читает Count записей из нетипизированного файла, связанного с файловой переменной F, в буфер Buf. Если задан параметр Result, то в него возвращается число действительно прочитанных записей.
BlockWrite (var F: File; var Buf; Count: Integer [; var Result: Integer]) - записывает Count записей из буфера Buf в нетипизированный файл, связанный с файловой переменной F. Если задан параметр Result, то в него возвращается число действительно произведенных записей.
Ini – файлы
Файлы .INI - это текстовые файлы, предназначенные в 16-разрядных Windows 3.x для хранения информации о настройках различных приложений. Информация логически группируется в разделы, каждый из которых начинается оператором заголовка, заключенным в квадратные скобки. Например, [Desktop]. В строках, следующих за заголовком содержится информация, относящаяся к данному разделу, в форме:
<ключ>=<значение>
Пример фрагмента файла WIN.INI
[windows]
run=
NullPort=None
load=essdaemn.exe hpljsw.exe
device=Epson LX-100,EPSON9,LPT1:
[Desktop]
Wallpaper=(None)
TileWallpaper=0
WallpaperStyle=0
Pattern=(Нет)
[Intl]
iCountry=7
ICurrDigits=0
iCurrency=1
...
В Windows 95 и NT использование файлов .INI не поощряется и вместо типа TIniFile, инкапсулирующего свойства этих файлов, используются типы TRegistry, TRegIniFile и TRegistryIniFile, инкапсулирующие свойства системного реестра - registry.
Когда в приложении создается объект типа TIniFile, ему передается как FileName имя файла, с которым он связан. Свойства и методы TIniFile позволяют читать из файла .INI, записывать в него информацию, удалять целые разделы.
Файлы .INI, как правило, хранятся в каталоге Windows, который можно найти с помощью функции GetWindowsDirectory(Buffer, Size).
Функция GetWindowsDirectory возвращает путь к каталогу Windows. Этот каталог содержит файлы приложений Windows, файлы инициализации .ini и файлы справок .hlp. В этом каталоге вы можете хранить файлы инициализации и файлы справок своего приложения. Если приложение создает другие файлы, которые вы хотите хранить, не допуская к ним других пользователей, то помещайте их в каталог, указанный в переменной окружения HOMEPATH. При соответствующей установке этот каталог различен для всех пользователей.
Параметр Buffer является указателем на строку с нулевым символом в конце, в которую передается найденный путь. Этот путь записывается без заключительного обратного слэша "\", если только каталог Windows не является корневым.
Параметр Size указывает максимальный размер буфера в символах. Его величина должна быть не менее значения MAX_PATH.
При успешном выполнении функция копирует путь в Buffer и возвращает число символов в строке, не считая последненго нулевого. Если длина строки больше, чем Size,то возвращенное значение позволяет узнать требуемый размер буфера.
Если функция не смогла успешно завершиться, то она возвращает нулевое значение. В этом случае узнать причину отказа можно, вызвав GetLastError.
Если ваш каталог Windows назван WIN95 и расположен на диске C, то операторы
var APchar:array[0..254] of char;
...
GetWindowsDirectory(APchar,255);
занесут APchar в путь: C:\WIN95. Если Windows установлен непосредственно в корневом каталоге, то результатом выполнения функции будет C:\.
Следующие операторы создают объект Ini типа TIniFile и связывают его с файлом My.ini:
var Ini:TIniFile;
...
Ini:=TIniFile.Create('MY.INI');
Следующий оператор проверяет наличие в файле раздела My Section, содержащего ключ MyKey:
if Ini.ValueExists('My Section','MyKey') then ...
Следующий оператор заносит в ключ MyKey раздела My Section значение '5':
Ini.WriteInteger('My Section','MyKey',5);
Следующий оператор удаляет ключ MyKey раздела My Section:
Ini.DeleteKey('My Section','MyKey');
Следующие операторы сохраняют содержимое объекта Ini в файле на диске и разрушают объект Ini:
Ini.UpdateFile;
Ini.Free;
Задания на разработку
1. Создайте приложение, которое позволяет вводить и добавлять в текстовый файл информацию о пользователе, запустившем данное приложение.
2. Создайте приложение, которое работает с типизированным файлом (записывает и считывает данные числового одномерного массива).
3. Создайте приложение, которое работает с нетипизированным файлом (создает копии файлов).
4. Создайте приложение, которое сохраняет накстройки в Ini-файл(положение и размеры окна) и использует их при следующих загрузках приложения.