Как удалить файл delphi
В этой статье мы рассмотрим различные варианты копирования и удаления файлов с помощью Delphi. Попробуем осуществить копирование файла по частям. Узнаем о том, как удалять непустые каталоги с подкаталогами, а так же еще много полезной информации.
В самом простом случае вопрос копирования файлов очень прост (хотя поступило много пожеланий рассказать именно об этом)! Для этого достаточно посмотреть в хелп по Delphi :))
Копирование файлов
В Delphi есть функция CopyFile. Вот ее описание из хелпа
Параметры передаваемые в эту функцию:
- Указатель на имя существующего файла (нуль терминированная строка т.е. тип PChar! )
- Указатель на имя файла, который будет создан/перезаписан после копирования (нуль терминированная строка т.е. тип PChar! )
- Если этот параметр True и файл с таким именем уже существует, то функция вернет False. Если же файл, с именем указанным во втором параметре существует и в качестве третьего параметра передан False - то функция перезапишет файл и благополучно завершится.
Для того, чтобы точнее узнать при возникновении ошибки, что же все таки произошло, надо воспользоваться функцией GetLastError, которая возвращает код последней ошибки (формат DWORD). Теперь мы немного изменим пример:
Коды всех ошибок можно легко найти в хелпе.
Для углубления рассматриваемого вопроса приведу пример копирования файлов с помощью файлового потока (TFileStream). В приведенной пользовательской функции введены два дополнительных параметра From и Count, которые указывают, соответственно, с какого и по какой байт нужно копировать файл. Если необходимо скопировать весь файл, то необходимо передать нули. Вот код этой функции:
Удаление файлов
Для удаления файлов в Delphi так же предусмотрена специальная процедура DeleteFile. В качестве параметра, передаваемого в функцию, выступает строка типа PChar, указывающая имя файла, который нужно удалить. Сразу предлагаю Вам простой пример на использование этой функции:
Удаление пустой директории
Чтобы удалить пустую директорию с помощью Delphi достаточно обратиться к функции RemoveDir.
Эта функция возвращает True если директория, указанная в единственном параметре, передаваемом в функцию, успешно удалена, в противном случае функция возвратит False.
Часто возникает необходимость удалить непустую папку, содержащую не только файлы, но и другие вложенные папки. Для этого была написана пользовательская функция, удаляющая папку со всеми файлами и поддиректориями. Вот она:
А сейчас пример использования этой функции:
Общие замечания по данной теме
- Перед копированием или удалением файлов всегда проверяйте его наличие функцией FileExists:
- Чтобы использовать в функциях CopyFile и DeleteFile имена файлов полученные с помощью, например, OpenDialog, надо из привести к типу PChar:
- Всегда следите за именами файлов, используемых в функциях. Обращайте внимание на абсолютные и относительные пути. Из-за этого часто возникают ошибки, которые сложно отследить!
Ну вот наверно и все, что я хотел бы рассказать Вам о копировании и удалении в Delphi.
Если вам помог материал сайта кликните по оплаченной рекламе размещенной в центре
Когда речь идет о работе программы с текстовым файлом, подразумеваются процедуры ввода данных из файла в программу или, наоборот, запись этих данных в файл программой. Для текстового файла допустима простая работа с файлом без особых дополнительных механизмов, которые применяются для работы со специализированными файлами, такими как при загрузке данных из Excel или работе программы с базой данных. Разумеется, Delphi располагает возможностями работать с файлами с использованием компонентов. Но в данной статье рассматривается механизм прямой работы с текстовым файлом без использования дополнительных компонентов.
Итак, в общем виде, работа с файлом заключается в следующих этапах:
1. подключение к файлу – связь с внешним файлом, указание режима подключения;
2. выполнение операций записи в файл или чтения из файла;
3. завершение работы с файлом.
Подключение к файлу
Для связи программы с файлом используется специальная переменная – "Файловая переменная". Объявляется она так же как и любая переменная в Delphi. Тип это переменной может быть File для типизированных (хранящих данные определенного типа) файлов, а можно указать TextFile, что будет означать тип обычного текстового файла. Объявление переменной:
В исполняемом коде программы выполняется подключение к внешнему файлу:
Команда AssignFile, выполняет связь файловой переменной с внешним файлом. Вторым параметром указывается адрес файла. Он может быть задан относительным или абсолютным. Если указать только имя файла, то программа будет пытаться обнаружить его в той же директории, где она сама и находится. Абсолютный путь указывается от корневого диска:
Использование относительной директории дает возможность не привязываться к конкретным дискам и адресам. Например:
После того как выполнено подключение, выполняется процедура, устанавливающая режим работы с файлом. В основном это режим чтения или записи. Эти режимы назначаются процедурами Reset() ( для чтения) и rewrite() (для записи):
* Для команды Rewrite() следует учитывать, что при ее выполнении, она либо создает файл, указанный в файловой переменной, либо если он уже есть перезаписывает файл заново, удаляя старый без какого-то предупреждения.
Любую из указанных команд можно использовать без команды AssignFile(). Для этого достаточно вторым параметром указать путь к файлу. Таким образом, она сразу выполнит привязку файла к файловой переменной и назначит режим работы с этим файлом:
Операции с файлами
Для чтения из файла, необходимо назначить режим чтения и использовать команду Readln(), которая будет вводить в строковую переменную по одной строке из файла. Затем с этой переменой можно выполнить необходимые действия.
Обычно для загрузки всех строк из файла используется оператор цикла. Для того, чтобы определить, что файл закончился используется функция EOF() (End Of File). Таким образом получается цикл, в котором последовательно в строковую переменную вводятся все строки файла и завершающийся после окончания фала:
Для записи, назначение режим записи в файл и командой Writeln() производится запись по строкам.
Закрытие файла
По завершении работы с файлами, особенно в случае записи в них данных, необходимо корректно завершить работу с файловой переменной. Это делается для того, чтобы сохранить все внесенные в файл изменения.
Примеры работы с текстовыми файлами в Delphi
Чтение в переменную одного значения из файла:
Загрузить все строки файла в компонент Memo:
Следует отметить, что для этой задачи проще воспользоваться командой самого компонента Memo LoadFromFile().
Записать строку в файл:
Записать в текстовый файл все строки из компонента Memo:
Как и для чтения из файла в Memo, так и здесь, имеется специальная команда:
Для этого нам потребуется вызов всего одной функции, которая выполняет именно копирование файлов. Это функция CopyFile(). У нее три параметра, два из которых обязательны. Вот полный синтаксис.
CopyFile("путь до начального файла","Путь куда надо копировать",Перезаписывать или нет)
Пример: CopyFile("D:sekretBD.txt","C: ame.txt", true);
В первом параметре можно указывать не только полный путь до файла. Если укажем, например, такой путь "sekretBD.txt", то наша программа будет искать этот файл в своем каталоге. Имя и разрешение нужно указывать именно такими, какие они есть у файла, иначе программа просто не найдет файл.
Во втором параметре тоже можно указывать относительный путь и там вы можете указать имя и расширение файла такое, какое захотите. Т.е. с помощью этой функции можно делать и переименовывание тоже.
Третий параметр отвечает за перезапись файла. Если мы укажем true, то файл не будет перезаписан, а если false, то программа перезапишет файл.
Переименование файлов с помощью Delphi
За переименование файлов отвечает функция RenameFile(). У нее 2 параметра. Вот ее полный синтаксис
RenameFile("путь до файла","новое имя");
Честно говоря, синтаксис этой функции меня не особо радует. В нем тоже в обоих параметрах надо указывать полный путь. Т.е. если мы, например, напишем так
То он скопирует файл в каталог программы. Т.е. получается, что она может выполнять роль копирования тоже. Это немного странно.
Удаление файлов с помощью Delphi
Ну здесь все совсем просто. Функция, с помощью которой можно удалить файл, вызывается так:
Единственное, что она не всегда 100% удаляет файл. Когда файл защищен, она его не сможет удалить.
Работа с типизированными файлами в Delphi
Что такое типизированный файл? Это файл с определенной структурой. Обычно это структурой выступают записи и базовые типы. В общем, важно, чтобы у типа был известен фиксированный размер, поэтому тип string применять нельзя, нужно делать так: String[N].
Вначале нам нужно объявить переменную, где будут храниться данные из файла. Делается это так:
Var f: file of <Тип>
Например, f: file of string[30];
Затем нам нужно соединиться с файлом. Для этого есть команда AssignFile. Для вызова надо прописать два параметра, это переменная, которую мы объявили выше и путь до файла. Например
Теперь файл нужно открыть. Можно открыть двумя способами: с перезатиранием и без. Метод Rewrite открывает файл, предварительно создав его. Т.е. если файла в указанном нами пути не будет находиться, то он его создаст. Если там уже был такой файл, то он будет удален и заново создастся чистый файл. Метод Reset открывает файл и ставит указатель в самое начало файла. Но этот метод опасен тем, что если файла, указанного в подключении, нет, то программа вылетит с ошибкой. Так что для правильного применения функции Reset надо сказать компилятору об отключении ошибок. Задается это директивой т.е. полный синтаксис функции reset будет таким:
После этого надо проверить, был ли открыт файл или нет. Это можно сделать с помощью функции IOResult. Если она не равна нолю, то все успешно.
Полный синтаксис:
Также осуществить проверку поможет функция FileExists. В ней нужно указать путь до файла.
Для чтения файла служит функция Read(), в которой указываются два параметра: переменная файла и тип записи, в нашем случае это string[30]. Синтаксис:
Для записи в файл служит функция Write(), в которой указываются такие же два параметра: переменная файла и тип записи, в нашем случае это string[30]. Синтаксис:
Полностью прочитать весь файл можно с помощью цикла. Для этого надо употребить функцию EOF(). Это функция возвращает единицу тогда, когда файл закончился.
While not eof(f) do
Read(f,String[30]);
Также есть функция seek, с помощью которой мы можем перейти на интересующую нас запись. Например, нам нужно обратиться к 20 записи и мы делаем так:
Еще есть функция truncate, С помощью которой мы можем удалить все записи файла, начиная от позиции указателя. Позицию можно указать с помощью функции seek, кто не понял.
После выполнения всех операций с файлом, необходимо его закрыть с помощью функции CloseFile(f);
Вот и все. На этом урок закончен. До встречи на сайте!
В этом уроке рассмотрим очень важную тему в программировании - работа с файлами.
Практически в любой программе нужно копировать, открывать, изменять, сохранять, иногда удалять файлы.
Как известно, файлы имеют различные форматы и к ним применяются различные программы для обработки. Например, файлы рисунков BMP, текстовые файлы TXT и т.п. Файлы имеют различные имена и определенное расширение, имеющее в среде MS-DOS максимально три символа. Если у файла расширение RAR, то пользователь и операционная система знает, что это архиватор, причем windosw для обработки этого файла применяет средства, указанные в специальном разделе реестра.
Копирование файлов
Для копирования файлов применяется функция CopyFile. Формат ее такой:
CopyFile является функцией, которая возвращает флаг успешной или нет операции копирования.
Например, следующая строка:
Перемещение файлов
Для перемещения файлов применяется функция MoveFile. Она имеет следующий формат:
Ее параметры аналогичны вышерассмотренной команде за исключением отсутствия флага перезаписи.
Переименование файлов
У всех вышесказанных командах параметры исходного и конечного файла имеет тип PChar. Это строковый тип с завершающимся нулем. Возможно, вы раньше слышали о таком формате строковых данных. В такую переменную можно занести строку очень большой длины. Ее размер ограничивается наличием нулевого байта в конце. Теоретически такая переменная может иметь бесконечный размер. На практике она ограничивается размерами выделяемой памяти для программы (2Гб).
Преобразование обычной строковой переменной, типа String в PChar производится функцией:
При этом, для команд файловых операций возможны объединение строк. Например:
procedure TForm1.Button1Click(Sender: TObject);
Var InDir,OutDir:String; // объявление строковых переменных
InDir:='c:\1\'; // каталог исходных файлов
OutDir:='c:\2\'; // каталог записуемых файлов
Здесь налицо операция соединения двух строковых переменных.
В итоге этой процедуры будет копирование файлов c:\1\1.txt и c:\1\2.txt в каталог c:\2. Файлы копируются под теми же именами.
Удаление файлов
Работа с текстовыми файлами. Чтение из текстового файла
На прошлых уроках мы как, в компоненте Memo процесс загрузки и записи текстового файла делался следующим образом:
Все это благодаря свойству Lines, в котором хранятся строки.
Но на практике иногда необходимо прочитать только определенную строку или совершить операцию добавления строки в уже существующий файл.
Следующий пример обработки текстового файла очень похож на аналогичную на языке Pascal.
Знающие люди могут ощутить разницу, поскольку есть некоторые отличия.
Varf:TextFile; // объявление файловой переменной
st:String; // строковая переменная
AssignFile(f,'c:\1.txt'); // привязка названия файла к файловой переменной
// отключение контроля ошибок ввода-вывода
Reset(f); // открытие файла для чтения
// включение контроля ошибок ввода-вывода
ifIOResult<>0 then // если есть ошибка открытия, то
ShowMessage('Ошибка открытия файла C:\1.TXT');
Exit; // выход из процедуры при ошибке открытия файла
While not EOF(f) do // пока не конец файла делать цикл:
ReadLn(f,st); // читать из файла строку
ShowMessage(st); // выводить строку пользователю
CloseFile(f); // закрыть файл
Прокомментирую некоторые строки этого примера.
Команда AssignFile осуществляет привязку строки пути файла к файловой переменной. Все дальнейшие операции с файловой переменной автоматически осуществляются с указанным файлом. Для избежания путаниц, указывайте полный путь к файлу.
и являются директивами компилятору, что в этом месту соответственно следует отключить и включить контроль ошибок ввода-вывода. В данном случае при неудачной попытке открытия файла c:\1.txt (файл отсутствует или открыт для записи другой программой) наша программа не выдаст аварийной ошибки и продолжит выполнение данной процедуры. Это свойство полезно для обработки всех возможных случаев в работе программы.
Работа с текстовыми файлами. Запись в текстовый файл
procedure TForm1.Button1Click(Sender: TObject);
Var f:TextFile; // указатель на текстовый файл
AssignFile(f,'c:\1.txt'); // привязка названия к переменной
Append(f); // открыть файл для добавления
if IOResult<>0 then // если ошибка открытия (напр. файла нет)
Rewrite(f); // создать новый файл
if IOResult<>0 then // ошибка создания файла
ShowMessage('Ошибка создания файла C:\1.TXT');
WriteLn(f,'Привет'); // запись в файл строки с символами перевода строки
CloseFile(f); // закрыть файл
Процедура Append(Файл) открывает файл для записи и устанавливает указатель записи в конец файла, т.е. все добавляемые к файлу строки будут записаны в конец файла.
В нашем случае в самом начале файла 1.txt может не оказаться на диске, поэтому команда открытия файла для добавления вызовет ошибку. В этом случае срабатывает наш собственный контроль ошибок и выполняется команда создания файла.
Запись и чтение из файла не текстовых данных
Рассмотрим пример, в котором программа при выходе сохраняет свои размеры и положение окна на экране в файл и при последующем запуске восстанавливает состояние, которое было при выходе. Программа состоит из двух процедур OnShow и OnClose для окна Form1 программы.
procedure TForm1.FormShow(Sender: TObject);
Var f:file of Integer; // файловая переменная, тип integer
i:Integer; // целочистенная переменная
begin
if IOResult<>0 then Exit;
Read(f,i); //считать из файла значение
Form1.Top:=i; // верхнее положение окна
Form1.Left:=i; // левое положение окна
Form1.Width:=i; // ширина окна
Form1.Height:=i; // высота окна
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
Var f:file of Integer;
Читайте также: