Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.16;
Скачать: CL | DM;

Вниз

подскажите пожалуста почему не полностью удаляется 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.053 c
1-1104690666
Creativ
2005-01-02 21:31
2005.01.16
Значение переменных


1-1104408402
denis24
2004-12-30 15:06
2005.01.16
RichEdit


14-1104307084
NewDelpher
2004-12-29 10:58
2005.01.16
Куда пропал Дмитрий О.?


3-1103055497
ceval
2004-12-14 23:18
2005.01.16
Подскажите как вывести в Combobox содержания поля


11-1085626346
hammer
2004-05-27 06:52
2005.01.16
Как выключить, перезагрузить ПК прогой на kol