Часто, при работе с большим количеством файлов или просто для упорядочения, необходимо распределение файлов по отдельным каталогам и подкаталогам. Для автоматизации процесса, удобно, чтобы программа могла, при необходимости, самостоятельно создавать нужные ей директории для хранения файлов. В Delphi имеется набор функций для обеспечения данной задачи.
Средства копирования, переименования и перемещения папки рассматриваются в отдельной статье.
Создать папку в Delphi можно воспользовавшись функцией CreateDir или процедурой MkDir. Так же можно воспользоваться функцией ForceDirectories. Первые две команды корректно выполняют создание одной новой папки. Отличия же в том, как они себя ведут в случае если создать папку невозможно.
функция CreateDir, в результате своего выполнения возвращает True, если создание папки успешно выполнено и False, если по какой-то причине создание выполнить не удалось. Это удобно для случаев, когда заданная директория может быть уже создана. Здесь можно работать без предварительной проверки на существование такой директории.
if CreateDir('newfolder') then
ShowMessage('Папка успешно создана.')
else
ShowMessage('Ошибка: папка не создана.');
процедуру MkDir стоит использовать либо в случае, если заведомо известно, что создаваемой директории нет, либо с предварительной проверкой, так как при невозможности создать указанную папку, программа выведет ошибку.
MkDir('newfolder');
В качестве параметра обе эти подпрограммы получают либо полный, либо относительный путь создаваемой папки. Например:
// полный путь
my_dir1 = 'С:/folder1/folder2/newfolder';
// относительный путь
my_dir2 = 'newfolder';
my_dir3 = 'folder1/newfolder';
my_dir4 = ' ../newfolder';
При использовании любой из указанных переменных, параметром для любой команды создания папки, будет создаваться только папка "newfolder". Создать директорию, используя переменные my_dir1 и my_dir3 можно только, если все остальные папки в директории уже существуют. Например, если папка "'folder1" еще не создана, то и создать "newfolder" так не получится.
Для создания нескольких вложенных директорий можно использовать функцию ForceDirectories, в которой указывается полный путь. Причем здесь нужно указывать полный путь.
ForceDirectories('С:/folder1/folder2/newfolder');
Такая команда создаст на диске C: все указанные папки.
Чтобы все же работать с фалами относительно папки с программой, можно указать вычисление пути к папке программы с помощью функции ExtractFilePath.
ForceDirectories(ExtractFilePath(Application.ExeName) + '/folder1/folder2/newfolder');
При удалении папки, важно учитывать есть ли в ней вложения или нет. Если папка пуста, то используется функция RemoveDir, в которой аналогично созданию, указывается путь к удаляемой папке. Функция при своем выполнении так же возвращает True, если удаление успешно и False, если удалить не удалось.
if RemoveDir('myfolder') then
ShowMessage('Папка успешно удалена.')
else
ShowMessage('Ошибка: папка не удалена.');
Если же папка не пуста, то можно использовать пользовательскую функцию, которая будет последовательно удалять все вложенные файлы, а затем и пустые папки. Для среды Delphi 2010, можно воспользоваться следующим методом:
TDirectory.Delete('myfolder', True);
При этом, в разделе описаний должна быть добавлена библиотека IOUtils.
uses IOUtils;
Если же такой возможности нет, стоит использовать следующую функцию, описанную еще в DelphiWorld. В параметре указывается путь к удаляемой папке. При успешном удалении (включая все вложения), функция вернет значение True, если удаление не удалось, вернет False.
// Функция удаления директории с вложениями.
function MyDirectoryDelete(dir: string): Boolean;
var
fos: TSHFileOpStruct;
begin
ZeroMemory(@fos, SizeOf(fos));
with fos do begin
wFunc := FO_DELETE;
fFlags := FOF_SILENT or FOF_NOCONFIRMATION
pFrom := PChar(dir + #0);
end;
Result := (0 = ShFileOperation(fos));
end;
// Вызов функции удаление в программе.
begin if MyDirectoryDelete('myfolder') then
ShowMessage('Папка успешно удалена.')
else
ShowMessage('Ошибка: папка не удалена.');
end;
В раздел описаний здесь необходимо добавить библиотеку ShellApi.
uses
ShellApi;
Для проверки наличия директории используется функция DirectoryExists. В параметре так же указывается полный или относительный путь к папке. Если заданная папка существует, функция вернет True, в обратном случае False.
if DirectoryExists('myfolder') then
ShowMessage('Папка существует.')
else
ShowMessage('Такой папки нет.');
Загрузка данных из Excel в Delphi StringGrid или массив
Математические функции в Delphi
полиграф
- 05 января 2022, 10:44 ↓Akmaljon
- 11 ноября 2021, 06:50 ↓Антон Сенников
- 18 февраля 2021, 10:05 ↓Но думаю, что константы как элемент программирования введены как раз для защиты от изменений их значения. Если у вас есть необходимость переопределить значение, то проще было бы просто назначить переменную, а не константу.
Было бы очень интересно узнать по поводу переназначения констант (в Pascal или другом языке). Если кто-то из посетителей сайта знает точно, напишите пожалуйста.
Ikrom
- 13 февраля 2021, 12:45 ↓