Форум: "Начинающим";
Текущий архив: 2006.03.19;
Скачать: [xml.tar.bz2];
ВнизКак от личить файл от папки при FindFirst Найти похожие ветки
← →
TStas © (2006-02-20 07:50) [0]Если нужно и то, и другое, колнечноая цель - все стьереть, то есть аналог DEleteFolder, просто не могу найти в каком модуле он живет, проже самому написать.
← →
AbrosimovA (2006-02-20 08:16) [1]faDirectory - директория
← →
TStas © (2006-02-20 23:09) [2]SR.Attr=FaDirectory//ошибка потому и спросил
← →
Zeqfreed © (2006-02-20 23:12) [3]
if (sr.Attr and faDirectory = faDirectory) then ;
← →
TStas © (2006-02-24 23:39) [4]function ClearDir(const Path: string): Boolean;
var
SR: TSearchRec;
FilePath: String;
begin
//ShowMessage("Ïîëó÷åíî íà âõîäå "+Path);
Result := DirectoryExists(Path);
if not Result then Exit;
if FindFirst(path+"\*.*", faAnyFile, SR)=0 then
repeat
if (sr.Name<>".") and (sr.Name<>"..") and
(sr.Attr and faDirectory <> faDirectory) then
begin
FilePath:=Path+"\"+sr.Name;
try
DeleteFile(FilePath);
except Result:=false; end;
end;
until FindNext(SR)<>0;
FindClose(sr);
if FindFirst(path+"\*.*", faDirectory, SR)=0 then
repeat
begin
if (sr.Name=".") or (sr.Name="..") then continue;
FilePath:=Path+"\"+sr.Name;
ClearDir(FilePath);
end
until FindNext(SR)<>0;
FindClose(sr);
rmDir(Path);
end;
Получился вполне рабочи код. Одно плохо - стирает все, вычищает саму папку, но при удалении ее возникает ошика 32. С чем это связано - ума не приложу, видимо, нечего прикладывать
← →
Джо © (2006-02-25 00:13) [5]> но при удалении ее возникает ошика 32.
Code: 32.
The process cannot access the file because it is being used by another process.
Для какого-то процесса, вероятно, эта папка является текущей. В XP и Win2K ты не сможешь удалить такую папку.
← →
TStas © (2006-02-25 00:32) [6]И чего сделать? Это ж рекурсия? Может в try засунуть. А не удалится - так судбба ее жить на Земле
← →
Джо © (2006-02-25 00:36) [7]> [6] TStas © (25.02.06 00:32)
Ну, используй DeleteFile. Она возвращает булевское значение, а исключений не возбуждает.
← →
Джо © (2006-02-25 00:37) [8]> [7] Джо © (25.02.06 00:36)
> Ну, используй DeleteFile.
Тьфу, то есть RemoveDir.
← →
Grief © (2006-02-25 01:45) [9]Можно извратнуться и поискать хэндл процесса, который занимает эту папку, убить его и вновь попытаться удалить ее.
← →
Джо © (2006-02-25 01:47) [10]> [9] Grief © (25.02.06 01:45)
> Можно извратнуться и поискать хэндл процесса, который занимает
> эту папку, убить его и вновь попытаться удалить ее.
Угу. За такое лучше убить кого-то другого... Даже смайлик не поставлю.
← →
novice_man © (2006-02-25 05:31) [11]Что до ошибки возникаюей при выполнении RmDir, пример из справки:
uses Dialogs;
begin
{$I-}
{ Get directory name from TEdit control }
RmDir(Edit1.Text);
if IOResult <> 0 then
MessageDlg("Cannot remove directory", mtWarning, [mbOk], 0)
else
MessageDlg("Directory removed", mtInformation, [mbOk], 0);
end;
Попробуй перед выполнениемRmDir
сменить текущий каталог (можно попытаться проверить какой каталог текущий и если удаляемый, сменить).
← →
TStas © (2006-02-25 20:16) [12]>Попробуй перед выполнением RmDir сменить текущий каталог
А вот как его сменить? uses WinDos - не понимает, а что такое виндос, а именно в нем описана стандартная паскалевская функция смены каталога
← →
Джо © (2006-02-25 20:25) [13]> [12] TStas © (25.02.06 20:16)
> А вот как его сменитьChDir.
← →
TStas © (2006-02-28 23:41) [14]Забыл спасибу написать. Каталог делался текущим, т. к. я, пробуя его стирать, невольно показывал его, ну и...
Джо, как всегда - респект
← →
Джо © (2006-02-28 23:44) [15]> [14] TStas © (28.02.06 23:41)
> Забыл спасибу написать. Каталог делался текущим
Так и думал :)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.03.19;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.012 c