Главная страница
    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.037 c
1-1108401404
yarvu
2005-02-14 20:16
2005.02.27
ActiveX HTML


14-1107944962
AlexG
2005-02-09 13:29
2005.02.27
Проблема с кодировкой при записи в БД из PHP


14-1107350638
Шишкин Илья
2005-02-02 16:23
2005.02.27
NewMail


3-1106751140
vic1
2005-01-26 17:52
2005.02.27
insert into формат даты


10-1082127000
Koster
2004-04-16 18:50
2005.02.27
Передача массивом Ole объекту





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