Робота з директоріями в Дельфи
Робота з директоріями (папками) в Дельфі
У цій статті я постараюся познайомити Вас з деякими стандартними функціями для роботи з директоріями. І ще наведу кілька користувальницьких функцій і приклади їх використання. Також розглянуто питання виклику діалогу вибору директорії.
Для початку почнемо з простої функції для створення нової папки. Загальний вигляд функції такої:
function CreateDir (const Dir: string): Boolean;
Тобто якщо папка успішно створена функція повертає true. Відразу ж простий приклад її використання:
procedure TForm1.Button1Click (Sender: TObject);
begin
if createdir ( 'c: \ TestDir') = true then
showmessage ( 'Директорія успішно створена')
else
showmessage ( 'При створенні директорії сталася помилка');
end;
При натисканні на кнопку програма намагається створити папку з ім'ям TestDir на диску C: і якщо спроба увінчалася успіхом, то виводиться відповідне повідомлення. Слід зазначити, що якщо ви не вказуєте ім'я диска, на якому хочете створювати папку, то функція буде створювати папку в тій же директорії, де знаходиться сама програма.
приведуть до одного і того ж результату.
function RemoveDir (const Dir: string): Boolean;
Відразу ж хочу попередити, що дана функція здатна видаляти тільки порожні папки, і якщо там що-небудь буде, то станеться помилка! Але вихід є. Тут нам на допомогу прийде призначена для користувача функція з простою назвою MyRemoveDir. Ось опис функції:
Function MyRemoveDir (sDir. String). Boolean;
var
iIndex. Integer;
SearchRec. TSearchRec;
sFileName. String;
begin
Result: = False;
sDir: = sDir + '\ *. *';
iIndex: = FindFirst (sDir, faAnyFile, SearchRec);
while iIndex = 0 do begin
sFileName: = ExtractFileDir (sDir) + '\' + SearchRec.Name;
if SearchRec.Attr = faDirectory then begin
if (SearchRec.Name <> '') And
(SearchRec.Name <> '.') And
(SearchRec.Name <> '..') then
MyRemoveDir (sFileName);
end else begin
if SearchRec.Attr <> faArchive then
FileSetAttr (sFileName, faArchive);
if NOT DeleteFile (sFileName) then
ShowMessage ( 'Could NOT delete' + sFileName);
end;
iIndex: = FindNext (SearchRec);
end;
RemoveDir (ExtractFileDir (sDir));
Result: = True
end;
Копіюєте це все в Вашу програму, а потім цю функцію можна викликати наприклад так:
if NOT MyRemoveDir ( 'C: \ TestDir') then
ShowMessage ( 'Не можу видалити цю директорію');
Тепер трохи відсторонився від безпосередньої роботи з папками і розглянемо яке хвилює багатьох питання. Як викликати діалог вибору папки (як при установці програм). ПРОСТО.
Підключаємо в uses модуль Filectrl.pas (тобто uses FileCtrl;). Тепер ставимо на форму ще кнопочку (щоб не плутатися :) і пишемо такий код:
procedure TForm1.Button3Click (Sender: TObject);
const
SELDIRHELP = 1000;
var
Dir: string;
begin
Dir: = 'C: \ windows';
if SelectDirectory (Dir, [sdAllowCreate, sdPerformCreate, sdPrompt], SELDIRHELP) then
Caption: = Dir;
end;
При виборі директорії в заголовку форми відобразитися її назву!
procedure ForceDirectories (Dir: string);
Приклад її використання (як завжди я поставив на форму нову кнопку, а там написав)
procedure TForm1.Button4Click (Sender: TObject);
var
Dir: string;
begin
Dir: = 'C: \ MyDir \ Test \ Dir1';
ForceDirectories (Dir);
end;
Ну і наостанок наведу функцію для перевірки: чи існує директорія чи ні. Її загальний вигляд такий:
function DirectoryExists (Name: string): Boolean;
Якщо директорія зазначена в параметрі Name існує - то функція поверне true.
Сподіваюся, що допоміг Вам описом даних функцій і процедур. Відразу хочеться дати пораду: частіше заглядайте в HELP, там багато цікавої і корисної інформації!
Удачі в програмуванні.