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

Вниз

Как грамотно стиреть директорию ?   Найти похожие ветки 

 
JohnKorsh   (2005-02-09 08:48) [0]

Не поможете ли с таким вопросом: Я очистил директорию стандартными методами (FindFirst, Erase, потом FindNext, Erase в цикле) но после этого сама директория не стирается, хотя и пустая. (RmDir) (После очистки текущую директорию я сменил). При отладке пишется ошибка I/O 32, но в Help I/O ошибки начинаются с N 105.
При повторном запуске программы эта директория успешно стирается.
Может от последнего FindNext остается кака-то I/O ошибка, так как бы ее удалить ?


 
КаПиБаРа ©   (2005-02-09 08:52) [1]

Код приведи


 
begin...end ©   (2005-02-09 09:07) [2]

> JohnKorsh   (09.02.05 8:48)

Можно ещё воспользоваться API-функцией SHFileOperation. Тогда каталог даже не придётся очищать перед удалением.


 
Fay ©   (2005-02-09 09:26) [3]

2 JohnKorsh   (09.02.05 08:48)
Какие-то ошибки неоходимо исправлять каким-то способом.
Запиши, чтобы не забыть.


 
JohnKorsh   (2005-02-09 10:16) [4]

Извините, текст длинноват, но вот он:

        My_Doc_Dir := ShellDir ("Personal");        
// Ищу My Documents на данном компьютере.

        if My_Doc_Dir = "" then My_Doc_Dir := "C:\";

        ChDir (My_Doc_Dir);          
// Перехожу в My Documents.

        if DirectoryExists (My_Doc_Dir + Init_Dir) then    
// Смотрю есть ли моя директория и перехожу в неё.
         begin
          ChDir (My_Doc_Dir + "\" + Init_Dir);

// Всё чищу в директории.

          if FindFirst (My_Doc_Dir + Init_Dir + "\*.*",
                        faAnyFile, Search) = 0 then
           begin
            if ((Search.Name <> ".") and (Search.Name<> ".."))  then
             begin
              FileSetAttr (Search.Name, $20);
              AssignFile(F, Search.Name);
              Erase (F);
             end;
           end;

          While FindNext (Search) = 0 do
           begin
            if ((Search.Name <> ".") and (Search.Name <> "..")) then
             begin
              FileSetAttr (Search.Name, $20);
              AssignFile(F, Search.Name);
              Erase (F);
             end;
           end;
         end;

    ChDir (My_Doc_Dir);    // Перехожу в My Documents.

    if DirectoryExists (Init_Dir) then
     begin
      try
       RmDir (Init_Dir);
// Вот здесь при отладке возникает IO 32.
      except
      end;
     end;

   end;


 
Плохиш ©   (2005-02-09 10:20) [5]

FindClose где?


 
begin...end ©   (2005-02-09 10:26) [6]

> JohnKorsh   (09.02.05 10:16) [4]

Во-первых, вот это:

> AssignFile(F, Search.Name);
> Erase (F)

можно заменить на DeleteFile.

Во-вторых, в очищаемой папке не может быть подкаталогов? Если они там всё же могут быть, то следует добавить рекурсивное удаление в подпапках.

В-третьих, см. [5].

В-четвёртых, чем всё-таки так не нравится SHFileOperation?


 
JohnKorsh   (2005-02-09 10:34) [7]

Спасибо, помогло. (FindClose, а SHFileOperation еще лучше)



Страницы: 1 вся ветка

Текущий архив: 2005.02.27;
Скачать: CL | DM;

Наверх




Память: 0.46 MB
Время: 0.043 c
11-1091893467
Spok
2004-08-07 19:44
2005.02.27
Глюк KOL.TStrList.Count


1-1108173517
Alex_Petr
2005-02-12 04:58
2005.02.27
Нужно ли закрывать Handle терминированного процесса ?


14-1107772094
АлексейК
2005-02-07 13:28
2005.02.27
Построение отчетов


3-1107180484
YK
2005-01-31 17:08
2005.02.27
проблемы с DBNavigator


1-1108126253
snake_r
2005-02-11 15:50
2005.02.27
выделение в StringGrid





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский