Другие языки программирования и технологии

как через Pascal удалить папку? и можно ли это вообще сделать?

знаю как удалить файл, но можно ли удалить папку? Если кто знает, подскажите плиз
FindFirst - ищет файл в заданном каталоге каталоге.
FindNext - продолжает поиск файлов в заданном каталоге.
Erase - удаляет файл.
Remove - удаляет пустой каталог.
алгоритм такой:
1)находишь первый файл в каталоге с помощъю FindFirst,одним из возвращаемых параметров файла должна быть структура о которой вы можете много прочесть в интернетах или документации к компилятору.
2)передаете эту структуру функции FindNext,которая будет вызываться в цикле с условием While DosError = 0,пока DosError не равен нулю, значит файлы есть в каталоге и их надо оттуда удалять.
3)удаляем файл с помощъю Erase,если он был найден.
4)после того как в DosError запишется чтот окроме нуля, можно уже удалять всю директорию.
но лучше на паскале таким извратом не заниматься, проще замутить это в делфи, на паскале вам постоянно, что бы удалить файл, придется перед этим связывать его с файловой переменно, да и у других функций много всяких заморочек с возвращаемыми структурами и кодами ошибок. код получится огромный и трудный для отладки. в делфи же для каждой функции есть обертки, размер уменьшится раза в три, ибо если спуститься ниже мы увидим что это банальные апи с которыми вобще все очень просто.
Азамат Кулбалаев
Азамат Кулбалаев
2 751
Лучший ответ
Unlocker — программа позволяющая пользователю удалять, перемещать и переименовывать файлы и папки, заблокированные другими системными процессами. http://biblprog.org.ua/ru/unlocker/
Багир Mурадов
Багир Mурадов
19 500
rmdir x:\путь
Вот может поможет

Команда по удалению папки с подпапками Вы можете увидеть ниже:

DELTREE [диск: ] путь

Ключи командной строки.

/Y - блокировка выдачи запросов на подтверждение удаления подпапок.

Пример.

Удалить папку E:\ALL\TEXTFILE со всем её содержимым.

C:\ DOC > DELTREE E:\ALL\TEXTFILE
Денис Лисевич
Денис Лисевич
2 788
Держи удалит папку вместе с содержимым

var i:string;t1:integer;g:file;d1:string;
begin
d1:='C:\Users\admin\Desktop\NFS';
for t1:=1 to 999 do begin
foreach var gf in EnumerateFiles(d1, '*')do begin
Assign(g, gf);
Erase(g);
end;
end;
i:='C:\Users\admin\Desktop\NFS';
rmdir(i);
end.
Это для Делфи, но с очень маленьким напильником пойдет на чистом паскале.

procedure RemoveDir(path: string);
var
sr: TSearchRec;
begin
if FindFirst(path + '\*.*', faAnyFile, sr) = 0 then
repeat
if (((sr.Name='.') or (sr.Name='..'))=false) then
if sr.Attr=faDirectory then RemoveDir(path + '\' + sr.name)
else DeleteFile(path + '\' + sr.name)
until FindNext(sr) <> 0;
FindClose(sr);
RemoveDirectory(PChar(path));
end;

Похожие вопросы