EN / RU
РАБОТА С ФАЙЛАМИ В СРЕДЕ 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
 
 




Добавить комментарий:

Имя:   
Текст:




Внимание! При перепечатке эта ссылка обязательна!