Работа с файлами — важная тема программирования. Практически в любой программе нужно копировать, открывать, изменять, иногда удалять файлы, а также хранить данные.
Файл - это именованная структура данных, предоставляющая собой последовательность элементов данных одного типа, при этом количество элементов последовательности не ограничено.
Файлы имеют различные форматы и к ним применяются разные программы для обработки. Например, файлы рисунков BMP, текстовые файлы TXT. Файлы имеют имена и определенное расширение, имеющее в среде MS-DOS максимально три символа. По расширению файла можно определить его тип. Если у файла расширение ZIP, то пользователь и операционная система знают, что это архив, причем Windows для обработки файла применяет средства, указанные в специальном разделе реестра.
Много процедур, функций, типов и констант для работы с файлами определено в модулях System и SysUtils. В процессе создания нового проекта названия обоих модулей автоматически вносятся в раздел uses модуля формы. В случае подготовки модуля, не связанного с формой, нужно самостоятельно вписать название этих модулей в раздел uses.
|
|
Для работы с файловой системой предназначены четыре специальных компонента FileListBox, DerectoryListBox, DriveComboBox, FilterComboBox. Расположены они на закладке Win3.1 Палитры компонентов. Кроме того, работу с файлами соответствующих форматов поддерживают некоторые компоненты и объекты, такие как Memo, ListBox, Picture, Clipboard.
Средства системных модулей для работы
с файлами
Модуль System реализует средства низкого уровня, предназначенные для ввода/вывода, обработки строк, операций с числами и работы с динамической памятью. Модуль SysUtils расширяет возможности модуля System. В нем находятся средства, предназначенные для работы с дисками, каталогами и файлами, операциями со строками, данными типа TDateTime даты и времени, а также определяются классы исключительных ситуаций.
В эти модули входят функции, имеющие целочисленный и логический тип. Целочисленные функции в случае нормального завершения работы значение 0. Логические функции в случае нормального завершения возвращают значение True, в случае ошибки – False.
Копирование файлов
Для копирования файлов применяется функция CopyFile. Формат ее такой:
function CopyFile(const OldName, NewName: string, Флаг_перезаписи): Boolean;
где:
OldName — полный путь и название файла, который копируется;
NewName - полный путь и название файла, куда копируется исходный файл;
Флаг_перезаписи — будет ли перезаписан файл, если таковой уже существует (True — не будет, False — будет перезаписан).
CopyFile является функцией, которая возвращает флаг успешной или нет операции копирования.
|
|
Пример:
Следующая строка копирует файл text.doc в файл copytext.doc только в том случае, если файла copetext.doc не существует. В противном случае будет выдаваться сообщение об ошибке копирования:
if not CopyFile('c:\text.doc','c:\copytext.doc', True) then ShowMessage('Ошибка копирования');
Перемещение файлов
Для перемещения файлов применяется функция MoveFile. Она имеет следующий синтаксис:
function MoveFile(const OldName, NewName: string): Boolean;
Ее параметры аналогичны вышерассмотренной команде за исключением отсутствия флага перезаписи.
Пример:
if not MoveFile('c:\1.com','c:\2.com') then ShowMessage('Ошибка перемещения');
Переименование файлов
Функция RenameFile находится в модуле SysUtils и имеет синтаксис:
function RenameFile(const OldName, NewName: string): Boolean;
Функция RenameFile переименовывает имя файла OldFile в NewFile. Если операция завершена успешно, функция возвращает значение True. Если файл переименовать не удалось (напрмер, если файл, с именем NewName уже существует), возвращается значение False.
Пример:
if not RenameFile('c:\rrr.dat','c:\qqq.dat') then ShowMessage('Ошибка переименования');
У функций MoveFile и CopyFile параметры исходного и конечного файла имеет тип PChar. Это строковый тип с завершающимся нулем. В такую переменную можно занести строку очень большой длины. Ее размер ограничивается наличием нулевого байта в конце. Теоретически такая переменная может иметь бесконечный размер. На практике она ограничивается размерами выделяемой памяти для программы (2Гб).
Преобразование обычной строковой переменной, типа String в PChar производится функцией PChar(Строковая_переменная).
Для параметров описаных процедур можно применять объединение строк.
Пример:
Здесь производится конкатенация двух строковых переменных. В результате работы этой процедуры будет произведено копирование файлов c:\a1\pp1.doc и c:\a1\pp2.doc в каталог c:\a2. Файлы копируются под теми же именами.
procedure TForm1.Button1Click(Sender: TObject);
Var InDir, OutDir: String; // объявление строковых переменных
begin
InDir:='c:\a1\'; // каталог исходных файлов
OutDir:='c:\a2\'; // каталог записуемых файлов
CopyFile(PChar(InDir+'pp1.doc'), PChar (OutDir + 'pp1.doc'), False);
CopyFile(PChar(InDir+'pp2.doc'),PChar(OutDir + 'pp2.doc'), False);
end;
Удаление файлов
Функция DeleteFile находится в модуле SysUtils и имеет синтаксис:
function DeleteFile(const FileName: string): Boolean;
Функция DeleteFile удаляет файл с именем FileName с диска. Если файл не найден или не может быть удален, функция возвращает значениеFalse.
Пример:
if not DeleteFile('c:\t1.txt') then ShowMessage('Ошибка удаления');
Пример:
Из однострочного редактора считывается имя файа, и если он существует, то он удаляется.
if FileExists(Edit1.Text) then DeleteFile(Edit1.Text);