РАБОТА С ФАЙЛАМИ В СРЕДЕ
DELPHI
Для работы с файлами в дельфях существует довольно
приличный набор функций,
многие из которых унаследованы напрямую из
паскаля.
Я не ставлю своей целью детально разбирать
каждую из них, так как на это есть весьма неплохие справочники, однако неплохо
бы разобрать основной минимум,
который необходимо знать кождому, кто
желает встраивать в свои проги на
паскале поддержку файлового
ввода-вывода.
Итак для начала следует уяснить себе, что с
точки зрения дельфи, все файлы делятся на бинарные и текстовые, исходя из этого,
перед тем, как начать работу с каким- либо
файлом, вы должны решить, хотите ли вы
работать с ним как с текстовым или
как с бинарником. Текст - он и есть текст -
обычный набор символов, которые
можно сразу же загружать в строковую
переменную и выводить на экран, например с помощью мессажебокса, а если на экран
выводить те же символы в бинарном виде,
то ничего кроме закорючек вы не увидете,
так как это всего-лишь цифровое
представление тех же символов.
То есть для бинарного режима требуется
дополнительные преобразования
символов, если вы хотите вывести их на
экран в читабельном виде.
Второе, что надо понять - это то, что
система обращается к каждому файлу
не по его имени, а по номеру или
хендлу.
То есть берешь имя файла, связываешь его с
каким-нибудь номером и затем передаешь
этот номер системе. Система по этому номеру
обращается к файлу.
И третье - открываем файл в нужном режиме,
устанавливаем указатель чтения на начало
(или куда нам надо), и затем пишем или
читаем.
Разберем вначале текстовый режим.
Для того, чтобы работать с файлом в этом
режиме, вы должны вначале
в разделе var объявить файловую
переменную, через которую вы будете
передавать системе хендл, и строковый
буфер, куда будете читать строку из файла.
Например, открываем в среде новый проект,
бросаем на него кнопку,
щелкаем по ней два раза и в обработчике
этой кнопки пишем например так:
procedure TForm1.Button1Click(Sender:
TObject);
var
F: TextFile;
S: string;
FileName: string;
begin
FileName:=' полный путь с
именем файла, например с:/myfile.txt';
AssignFile(F, FileName); // вот это и
есть привязка файла к хендлу теперь (F) будет указывать
// именно на наш файл.
Reset(F);
// устанавливаем указатель на начало файла
Readln(F,S);
// читаем строчку из файла
showmessage(S);
// выводим её на экран
CloseFile(F);
// закрываем файл, освобождаем хендл
AssignFile(F, FileName); //
привязываем снова.
Rewrite(F);
// открываем для записи, устанавливаем указатель на начало файла
Writeln(F,S);
// пишем строчку в файл
CloseFile(F);
// закрываем файл, освобождаем хендл
end;
Работа с файлами в бинарном режиме:
Делаем тоже самое - бросаем на форму кнопку
и в обработчике пишем:
procedure TForm1.Button1Click(Sender:
TObject);
var
FileHandle : Integer;
buffer: array[1..10] of byte;
fileneme:
string;
//строка с именем файла и путем к нему
begin
FileHandle := FileOpen(fileneme,
fmOpenWrite);
buffer[1]:=1;
buffer[5]:=5;
buffer[6]:=6;
//заполняем буфер какими-нибудь значениями
FileWrite(FileHandle, buffer,
10);
// сбрасываем буфер в файл.
FileClose(FileHandle);
// закрываем файл.
end;
Как видите принципиальных различий между
этими двумя способами нет, просто
функции разные. В текстовом режиме хендл
хранится в объекте типа TextFile;
А при открытии в бинарном режиме - в
обычной переменной типа интегер.
Бинарный режим позволяет прочитать подряд
нужное нам число байт, а текстовый режим
- обычно одну строчку за раз (хотя при
желании. можно и больше - например, функцией
BlockRead).
fmOpenWrite - это режим доступа - полный
список режимов вы можете посмотреть в справке дельфи.
Для вывода на экран символа из буфера,
его прийдется преобразовать. Например так:
s:=Char(buffer[i]);
где s - ваша строковая переменная, а i -
номер символа в буфере.
Kennobi 22.06.05