Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.034 c
14-1104075811
ПЕтя
2004-12-26 18:43
2005.01.16
1С Ппредприятие


6-1098876726
boban
2004-10-27 15:32
2005.01.16
Доступ к файлам, большое к-во файлов в папке


1-1104106961
dima hlevin
2004-12-27 03:22
2005.01.16
Как сохранит в exe файл моей программы строку а потом если надо е


1-1104266948
RSN
2004-12-28 23:49
2005.01.16
Фокус ввода


10-1080311374
seacat
2004-03-26 17:29
2005.01.16
Midas и прокси





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский