Не удаляется папка, если в ней есть незакрытые файлы - страница 3

 
Реter Konow:
Насколько я знаю, если в файл не вносились изменения с помощью файловых функций  (например FileWrite()), то закрывать его не нужно. Функция FileOpen() просто создает новый файл и эта операция не требует закрытия файла (в документации по этой функции, тоже не говорится, что файл нужно после создания закрывать).

Ой-ли!  Сказочник https://docs.mql4.com/ru/files/fileopen


//--- правильный способ работы в "файловой песочнице"
   ResetLastError();
   filehandle=FileOpen("fractals.csv",FILE_WRITE|FILE_CSV);
   if(filehandle!=INVALID_HANDLE)
     {
      FileWrite(filehandle,TimeCurrent(),Symbol(), EnumToString(ENUM_TIMEFRAMES(_Period)));
      FileClose(filehandle);
      Print("FileOpen OK");
     }
   else Pri

FileOpen - Файловые операции - Справочник MQL4
FileOpen - Файловые операции - Справочник MQL4
  • docs.mql4.com
FileOpen - Файловые операции - Справочник MQL4
 
Rashid Umarov:

Ой-ли!  Сказочник https://docs.mql4.com/ru/files/fileopen


В чем же противоречие с тем, что я сказал?

Я же сказал, -

Реter Konow:
Насколько я знаю, если в файл не вносились изменения с помощью файловых функций  (например FileWrite()), то закрывать его не нужно. Функция FileOpen() просто создает новый файл и эта операция не требует закрытия файла (в документации по этой функции, тоже не говорится, что файл нужно после создания закрывать).


А у Вас в примере используется функция FileWrite() сразу после создания файла. А потом используется FileClose(filehandle);


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

 
Реter Konow:

Именно так. Когда я пытаюсь удалить папку уже содержащую подпапки и файлы, то сначала удаляю файлы. Остаются только подпапки. Их пытаюсь очистить с помощью FolderClean() и потом вызываю FolderDelete(). Однако, в результате те подпапки которые были пусты хорошо удаляются, но если внутри подпапок были еще подпапки - они не удаляются. После этого, я пытаюсь удалить папки из файлового навигатора в MetaEditor вручную, но терминал их не удаляет и выскакивает это окно:

Нажимаю на "Continue", соглашаюсь на изменения, но папка все равно не стирается. После полного закрытия и повторного открытия терминала, папки которые должны были быть стерты либо сами исчезают, либо нет, но при этом их уже можно сразу стереть вручную без вышеприведенного окна.

Вот такие странности...

Наблюдал неоднократно такие вещи. Выяснил, что в какой-то момент папка Files со всеми подпапками и файлами получает атрибут read-only. Снятие руками этого флага не помогает. Но всегда помогает перезапуск терминала. Добиться воспроизведения не смог (не пытался), поэтому в СД не сообщал.

 
A100:

У ошибка (5022) возникает только если задать FILE_COMMON

Папку очищает, но не удаляет

Этот флаг ставить не нужно, иначе поиск файла будет происходить в общей папке, а ошибка говорит, что задано не верное имя директории.

Дорожка к файлу

"\\MQL4\\Files";

не требует установки этого флага. Так что все правильно.

 
fxsaber:

Наблюдал неоднократно такие вещи. Выяснил, что в какой-то момент папка Files со всеми подпапками и файлами получает атрибут read-only. Снятие руками этого флага не помогает. Но всегда помогает перезапуск терминала. Добиться воспроизведения не смог (не пытался), поэтому в СД не сообщал.

Спасибо. Рад что я не один с этой проблемой столкнулся. Мне "кровь из носу" нужно решить эту проблему (без этого не могу завершить польз.файловый навигатор). Написал в сервисдек. Но на всякий случай и сюда пишу. Оказалось не зря.) 
 
Реter Konow:

Этот флаг ставить не нужно, иначе поиск файла будет происходить в общей папке, а ошибка говорит, что задано не верное имя директории.

и с FILE_COMMON и без - работает (первоначально при проверке забыл этот флаг в последний if поставить). С FILE_COMMON подразумевалость что он во всех операциях присутствует

 
Реter Konow:

Этот флаг ставить не нужно, иначе поиск файла будет происходить в общей папке, а ошибка говорит, что задано не верное имя директории.

Дорожка к файлу

не требует установки этого флага. Так что все правильно.

Странно всё это. Я заметил что в пути к папкам MQL4 и перекомпилировал код в .ex4 и как ни странно, код отработал без ошибок. Удалил закрытие файла и получил

2017.08.28 17:36:18.525 Demo_FolderDelete EURUSD.e,H4: Не удалось удалить папку nonempty. Код ошибки=5025
2017.08.28 17:36:16.985 Demo_FolderDelete EURUSD.e,H4: Не удалось очистить папку nonempty. Код ошибки=5026

Потом без исправлений запустил на мт5 и, как ни странно, упоминание о папке MQL4 было проигнорировано. Папки и файл были созданы в папке MQL5. Дальше всё аналогично проверке в МТ4. Не закрытый файл не удаляется...

2017.08.28 17:50:45.328 Demo_FolderDelete (CADJPY,H4)   Не удалось очистить папку nonempty. Код ошибки=5025
2017.08.28 17:50:47.958 Demo_FolderDelete (CADJPY,H4)   Не удалось удалить папку nonempty. Код ошибки=5024
 
Ответил сервисдек. Сказали, что файл нужно после создания закрывать. Но я его закрываю, а проблема остается... Увы...(
 
Alexey Viktorov:

Странно всё это. Я заметил что в пути к папкам MQL4 и перекомпилировал код в .ex4 и как ни странно, код отработал без ошибок. Удалил закрытие файла и получил

Потом без исправлений запустил на мт5 и, как ни странно, упоминание о папке MQL4 было проигнорировано. Папки и файл были созданы в папке MQL5. Дальше всё аналогично проверке в МТ4. Не закрытый файл не удаляется...

Всмысле Вы сделали из скрипта советник и попробовали его запустить?

 
Реter Konow:
Но я его закрываю, а проблема остается... Увы...(
А попробуйте FILE_COMMON везде поставить
Причина обращения: