- Способы хранения информации: текстовый и двоичный
- Запись и чтение файлов в упрощенном режиме
- Открытие и закрытие файлов
- Управление дескрипторами файлов
- Выбор кодировки для текстового режима
- Запись и чтение массивов
- Запись и чтение структур (бинарные файлы)
- Запись и чтение переменных (бинарные файлы)
- Запись и чтение переменных (текстовые файлы)
- Управление позицией внутри файла
- Получение свойств файла
- Принудительная запись кэша на диск
- Удаление и проверка на существование файла
- Копирование и перемещение файлов
- Поиск файлов и папок
- Работа с папками
- Диалог выбора файла или папки
Удаление и проверка на существование файла
Проверка файла на существование и его удаление — критически важные действия, относящиеся к файловой системе: внешней среде, в которой "живут" файлы. До сих пор мы рассматривали функции, которые манипулируют внутренним содержимым файлов. Начиная с этого раздела акцент сместится в сторону функций, которые управляют файлами как неделимыми элементами.
bool FileIsExist(const string filename, int flag = 0)
Функция проверяет, существует ли файл с именем filename, и возвращает true, если это так. Каталог поиска выбирается с помощью параметра flag: когда он равен 0 (значение по умолчанию), файл ищется в каталоге текущей копии терминала (MQL5/Files); если flag равен FILE_COMMON, проверяется общий каталог всех терминалов Users/<пользователь>...MetaQuotes/Terminal/Common/Files. Если MQL-программа выполняется в тестере, рабочий каталог расположен внутри папки агента тестирования (Tester/<агент>/MQL5/Files), см. вводную часть главы Работа с файлами.
Указанное имя может принадлежать не файлу, а каталогу. В этом случае функция FileIsExist возвратит false, а в переменную _LastError будет записана псевдо-ошибка 5018 (FILE_IS_DIRECTORY).
bool FileDelete(const string filename, int flag = 0)
Функция удаляет файл с указанным именем filename. Параметр flag определяет местоположение файла. При значении по умолчанию удаление производится в рабочем каталоге текущего экземпляра терминала (MQL5/Files) или агента тестирования (Tester/<агент>/MQL5/Files), если программа выполняется в тестере. Если flag равен FILE_COMMON, файл должен находиться в общей папке всех терминалов (/Terminal/Common/Files).
Функция возвращает признак успешного выполнения (true) или ошибки (false).
Данная функция не позволяет удалять каталоги. Для этой цели воспользуйтесь функцией FolderDelete (см. раздел Работа с папками).
Упражнения с описанными функциями выполним в скрипте FileExist.mq5. В нем проведем несколько манипуляций с временным файлом.
const string filetemp = "MQL5Book/temp";
|
Файл изначально не существует, поэтому обе функции FileIsExist и FileDelete возвращают false, и код ошибки равен 5019 (FILE_NOT_EXIST).
Затем мы создаем файл, и функция FileIsExist сообщает о его наличии. Однако удалить его нельзя, потому что он открыт и занят нашим процессом (код ошибки 5006, CANNOT_DELETE_FILE).
После того как файл закрыт, его удается удалить.
В завершении скрипта проверке и попытке удаления подвергается каталог "MQL5Book". FileIsExist возвращает false, потому что это не файл, однако код ошибки 5018 (FILE_IS_DIRECTORY) уточняет, что это директория.