Робота з директоріями в Delphi (исходники), Різне, Програмування, статті

У цій статті я постараюся познайомити Вас з деякими стандартними функціями для роботи з директоріями. І ще наведу кілька користувальницьких функцій і приклади їх використання. Також розглянуто питання виклику діалогу вибору директорії.



Для початку почнемо з простої функції для створення нової папки. Загальний вид функції такий:

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: і якщо спроба увінчалася успіхом, то виводиться відповідне повідомлення. Слід зазначити, що якщо ви не вказуєте ім’я диска, на якому хочете створювати папку, то функція буде створювати папку в тій же директорії, де знаходиться сама програма.


Оголошення:

createdir(edit1.text);

і

createdir(extractfilepath(paramstr(0)) + edit1.text);

приведуть до одного й того ж результату.


Тепер розглянемо функцію для видалення папок. Її оголошення виглядає так:

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;
FindClose(SearchRec);
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;

При виборі директорії в заголовку форми відобразитися її назва!


Тепер розглянемо таку процедуру. Приміром Вам треба створити папку Dir1 за адресою: C: MyDirTestDir1, але при цьому папок MyDir і Test на Вашому комп’ютері не існує. Функція CreateDir тут не спрацює, тому скористаємося процедурою ForceDirectories. Її загальний вигляд такий:

procedure ForceDirectories(Dir: string);

Приклад її використання (як завжди я поставив на форму нову кнопку, а там написав)

procedure TForm1.Button4Click(Sender: TObject);
var
Dir: string;
begin
Dir := “C:MyDirTestDir1”;
ForceDirectories(Dir);
end;

Ну і наостанок приведу функцію для перевірки: чи існує директорія чи ні. Її загальний вигляд такий:

function DirectoryExists(name: string): Boolean;

Якщо директорія зазначена в параметрі Name існує – то функція поверне true.


Сподіваюся, що допоміг Вам описом даних функцій і процедур. Відразу хочеться дати пораду: частіше заглядайте в HELP, там багато цікавої і корисної інформації!


Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*