Работа с файлами

Работа с файлами — важная тема программирования. Практически в любой программе нужно копировать, открывать, изменять, иногда удалять файлы, а также хранить данные.

Файл - это именованная структура данных, предоставляющая собой последовательность элементов данных одного типа, при этом количество элементов последовательности не ограничено.

Файлы имеют различные форматы и к ним применяются разные программы для обработки. Например, файлы рисунков 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);


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: