Главная страница
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.053 c
1-1108236277
TBeginner
2005-02-12 22:24
2005.02.27
Cохранить в файл содержимое TListView


3-1107247230
ГС ТОФ
2005-02-01 11:40
2005.02.27
Что нужно сделать, чтобы программа СУБД заработала на другом ПК


1-1108069505
bot v0.00000001
2005-02-11 00:05
2005.02.27
дробная часть


14-1107361575
SPeller
2005-02-02 19:26
2005.02.27
Силикон


1-1107863839
Chip
2005-02-08 14:57
2005.02.27
Не пересекаются ли созданные Panel??????