Главная страница
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.48 MB
Время: 0.042 c
14-1107350638
Шишкин Илья
2005-02-02 16:23
2005.02.27
NewMail


3-1106937860
Eraser
2005-01-28 21:44
2005.02.27
Какоу базу данных выбрать?


6-1103107812
Grim
2004-12-15 13:50
2005.02.27
UDP Broadcast и OpenGL: проблемы


3-1106639334
Fiend
2005-01-25 10:48
2005.02.27
ADO Errors проблема


4-1105956362
lutik_
2005-01-17 13:06
2005.02.27
Опять DLL