Просто, так устроена операционная система. Терминал, как и 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 вставлять.
Вот и натыкаюсь на проблемы, связанные со своей неграмотностью. Но все проблемы решаемы.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Написал в сервисдеск. Но может у кого такое было.
----------------------------
Из заявки в сервисдеск:
Описание проблемы
При попытке удаления пустой папки с помощью 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("Папка удалена");
}
Во вкладку Эксперты выводится Папка удалена
Но при этом через проводник виндовс видно, что папка не удалена. И доступ к папке закрыт. При попытке программного создания папки с таким же именем терминал зависает.Удаляю терминал из памяти. Папка удаляется после удаления терминала.
Что делаю неправильно?
Распринтовка включена только для поиска ошибки.