Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.02.27;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.041 c
11-1092562217
nOvell
2004-08-15 13:30
2005.02.27
TrayIcon


8-1100346664
frEEstyler
2004-11-13 14:51
2005.02.27
не проигрываются vob файлы


14-1107242094
Ega23
2005-02-01 10:14
2005.02.27
Докладываю!


1-1107967914
alexa
2005-02-09 19:51
2005.02.27
Динамическое меню


1-1108017660
ivc_andr
2005-02-10 09:41
2005.02.27
Название приложения в MessageBox





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