Ошибка при удалении папки. Может у кого такое было? Как справились с проблемой?

 

Написал в сервисдеск. Но может у кого такое было.

----------------------------

Из заявки в сервисдеск:


Описание проблемы

При попытке удаления пустой папки с помощью FolderDelete папка не удаляется и далее удаляемую папку невозможно открыть в проводнике виндовс.

Только после выгрузки терминала из памяти папка удаляется.

Последовательность действий

Создаю в локальной папке несколько файлов.

Очищаю папку

               FolderClean(wFolder,0);

Удаляю папку

               FolderDelete(wFolder,0);

Все работает нормально.

Но мне необходимо удалить файлы с названием текущего символа. Другие файлы удалять нельзя.

И если в папке не остается файлов (то есть в папке на момент удаления были только файлы, в имени которых был текущий символ), то в этом случае папка должна быть удалена.

Для удаления применяю функции FileFindFirst и FileFindNext

С помощью данных функций нахожу определенные файлы

Ниже кусочек кода


wFolder - переменная с именем папки

long     search_handle=-1;

string   tmp="";

int       i, j=0;

                 for (i=0;true;i++)

                 {

                    if (search_handle<0)
                      {
                       search_handle=FileFindFirst(wFolder+"/*",tmp_name);
if (StringFind(tmp_name,Symbol())>0) {Print("delete file=",wFolder+"/"+tmp_name); FileDelete(wFolder+"/"+tmp_name); j++;}
                      }
                    else
                      {
                       FileFindNext(search_handle,tmp_name);
                       if (tmp_name==tmp) break;
if (StringFind(tmp_name,Symbol())>0) {Print("delete file=",wFolder+"/"+tmp_name); FileDelete(wFolder+"/"+tmp_name); j++;}
                      }

                    tmp=tmp_name;
                   }
Print("i=",i,"   j=",j);
Print("");
               if (j==i)
                 {
      ResetLastError();
                  if(!FolderDelete(wFolder)) Print("Не удалось удалить папку : ",wFolder,"   Код ошибки : ", GetLastError());
                  else Print("Папка удалена");
                 }

Во вкладку Эксперты выводится  Папка удалена

Но при этом через проводник виндовс видно, что папка не удалена. И доступ к папке закрыт. При попытке программного создания папки с таким же именем терминал зависает.

Удаляю терминал из памяти. Папка удаляется после удаления терминала.

Что делаю неправильно?

Распринтовка включена только для поиска ошибки.

 

Просто, так устроена операционная система. Терминал, как и Windows, условно удаляет папку, но Windows этого не видит, для нее папка просто заблокирована приложением. Да и не удалена она, а именно заблокирована,- все права переданы МТ. 

ЗЫ Да и не папка это, пока МТ с ней работает, а некоторое адресное пространство данных. Ну, дальше сами все понимаете...  

 

Но почему если файлы удаляются с помощью очистки папки все работает нормально.

А если файлы удаляются с помощьль поименного удалаения, то возникает проблема?

Применяем FolderClean(wFolder,0); - все нормально.

Применяем FileDelete- проблема.

Пробовал и FileClose(search_handle); Все равно проблема.

Согласен, что виндовс блокирует.

В одном случае блокирует, в другом - нет. Что-то здесь неладное.


 

Проблема решена. Надо внимательно читать документацию.

Применям FileFindClose(search_handle), а не

FileClose(search_handle)

И все будет Ок!

 
ну и ладненько... 
 

Отлаживаю новый зигзаг: http://www.onix-trade.net/forum/topic/92269-%D0%B5%D1%89%D0%B5-%D0%BE%D0%B4%D0%B8%D0%BD-%D0%B7%D0%B8%D0%B3%D0%B7%D0%B0%D0%B3-%D0%B2%D0%BE%D0%BB%D0%BD%D0%BE%D0%B2%D0%BE%D0%B9/#entry473074

Для волновиков. Эта версия в свободном доступе. Далее буду ее в ZUP вставлять.


Вот и натыкаюсь на проблемы, связанные со своей неграмотностью. Но все проблемы решаемы.

 
Согласен. Спокойной ночи. 
Причина обращения: