Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Eugeni Neumoin
2097
Eugeni Neumoin  

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

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

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


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

При попытке удаления пустой папки с помощью 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("Папка удалена");
                 }

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

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

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

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

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

Алексей Тарабанов
7327
Алексей Тарабанов  

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

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

Eugeni Neumoin
2097
Eugeni Neumoin  

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

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

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

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

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

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

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


Eugeni Neumoin
2097
Eugeni Neumoin  

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

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

FileClose(search_handle)

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

Алексей Тарабанов
7327
Алексей Тарабанов  
ну и ладненько... 
Eugeni Neumoin
2097
Eugeni Neumoin  

Отлаживаю новый зигзаг: 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 вставлять.


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

Алексей Тарабанов
7327
Алексей Тарабанов  
Согласен. Спокойной ночи. 
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий