Форум: "Основная";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];
Внизподскажите пожалуста почему не полностью удаляется dir Найти похожие ветки
← →
ceval © (2004-12-27 13:18) [0]Во время выполнения программы создаю директорию
.......
......
Dir :=Edit1.Text + "\" + FormatDateTime("yyyymmdd", Date); //
if ForceDirectories(Dir) then
Fmain.Label_dir.Caption :="Путь: " + Dir ;
и нужно если нажать кнопку Cancel эта директория удалилась
пишу такой код:.......
......
procedure TFmain.cancelClick(Sender: TObject)
....
Dir :=Fedit.Edit1.Text + "\" + FormatDateTime("yyyymmdd", Date) ;
RemoveDir(dir);
При создании dir создается например С:\Temp\20041227
а при нажатии Cancel удаляется только папка 20041227 а Temp остается
Подскажите почему не удаляется все вместе ???
Как удалить все полностью ???
← →
Arm79 (2004-12-27 13:43) [1]Либо удалять по очереди каждую папку, а не иерархию в целом, либо попытаться воспользоваться shFileOperation. Может и ошибся в названии, не помню точно.
← →
ламер © (2004-12-27 14:48) [2]ceval © (04.12.27 13:18)
в самом деле. очень странно. RemoveDir("C:\temp\tmp1") не удаляет каталог c:\temp. и корневой каталог (c:\) тоже почему-то не удаляет. очень, очень подозрительно.
← →
Arm79 (2004-12-27 15:00) [3]ламер © (27.12.04 14:48) [2]
%^)
← →
Zhekson (2004-12-27 15:22) [4]ламер © (27.12.04 14:48) [2]
в самую тютельку...
← →
ceval © (2004-12-27 17:09) [5]"и корневой каталог (c:\) тоже почему-то не удаляет. очень, очень подозрительно."
Начнем стого что С:\ диск а не каталог
а Temp для примера там может быть что угодно "12233" и "wegh"
указываю в Edit1 "С:\qwer\"
создается c:\qwer\20041227
Хорошо тупанул немного :(
Но тогда как удалить созданную директорию "qwer\20041227"
Но тогда как мне удалить созданную директорию
← →
Jay1982 © (2004-12-27 17:31) [6]Удаляй по очереди сначала DeleteDir("C:\qwer\20041227"), а потом DeleteDir("C:\qwer")
← →
begin...end © (2004-12-27 17:42) [7]> [5] ceval © (27.12.04 17:09)
Наиболее правильный, на мой взгляд, вариант (SHFileOperation) уже посоветовали в [1].
← →
begin...end © (2004-12-27 17:45) [8]> [6] Jay1982 © (27.12.04 17:31)
> Удаляй по очереди сначала DeleteDir("C:\qwer\20041227"),
> а потом DeleteDir("C:\qwer")
Что такое DeleteDir, не подскажешь?
← →
Jay1982 © (2004-12-27 17:48) [9]Извини забылся, моя ф-ция в конечном счёте делает RemoveDir
← →
Jay1982 © (2004-12-27 17:50) [10]Рекурсивная ф-ция удаления с подкаталогами:
function DeleteDir(Dir : string) : boolean;
Var
Found : integer;
SearchRec : TSearchRec;
begin
result:=false;
if IOResult<>0 then ;
ChDir(Dir);
if IOResult<>0 then begin
ShowMessage("Не могу войти в каталог: "+Dir); exit;
end;
Found := FindFirst("*.*", faAnyFile, SearchRec);
while Found = 0 do
begin
if (SearchRec.Name<>".")and(SearchRec.Name<>"..") then
if (SearchRec.Attr and faDirectory)<>0 then begin
if not DeleteDir(SearchRec.Name) then exit;
end else
if not DeleteFile(SearchRec.Name) then begin
ShowMessage("Не могу удалить файл: "+SearchRec.Name); exit;
end;
Found := FindNext(SearchRec);
end;
FindClose(SearchRec);
ChDir(".."); RmDir(Dir);
result:=IOResult=0;
end;
← →
Vit@ly © (2004-12-27 18:20) [11]How can delete a directory with its files and subdirectories?
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;
Example:
if NOT MyRemoveDir("D:\myDir") then
ShowMessage("Can NOT delete dir");
Note:
(1) Any system/hidden/read-only files will be deleted.
← →
Fay © (2004-12-27 21:35) [12]>> if (SearchRec.Name <> "" ) and
А так бывает?
← →
begin...end © (2004-12-27 21:38) [13]> [11] Vit@ly © (27.12.04 18:20)
> if SearchRec.Attr = faDirectory then
Странная проверка...
← →
vecna © (2004-12-28 01:12) [14]begin...end
>Странная проверка...
Что в ней странного ?
← →
begin...end © (2004-12-28 08:23) [15]> [14] vecna © (28.12.04 01:12)
Странно то, что за директорию считаются только элементы с ТОЛЬКО ОДНИМ атрибутом - faDirectory. Если каталог будет, например, ещё и скрытый, то для него поле SearchRec.Attr будет равно faDirectory or faHidden, что НЕ равно faDirectory, и поэтому такой объект за каталог не посчитается. Проверка должна быть такой: if SearchRec.Attr and faDirectory > 0 then...
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.037 c