Как проверить наличие папки из AFL?

Опубликовано в AmiBroker

В языке AFL нет функции, проверяющей существование папки. Однако такая функция мне часто требуется.

Есть встроенная функция fgetstatus(), которая позволяет получить атрибуты файла или папки. При отсутствии нужного файла (или, соответственно, папки), возвращает Null.

Я попробовал ее использовать. Результаты мне крайне не понравились. В какие-то моменты функция работает правильно, в иные - нет. Догадываюсь, что проблема где-то с блокировками, которые расставляет файловая система, но мне оттого никак не легче.

Не вопрос, попользуем штатные возможности операционной системы. MSDN подсказывает, что все просто:

function IsFolderExists(Folder)
{ Local ObjFSO;    objFSO = CreateObject("Scripting.FileSystemObject");
   Return objFSO.FolderExists(Folder);
}

Функция возвращает ненулевое значение, если папка существует

Проверять на каждой итерации скрипта? Поиск файла - процедура небыстрая. Закешируем результат выполнения функции после первой удачной попытки:

function IsFolderExists_Cached(Folder)
{ Local VarName,Result;   VarName = "~IsFolderExists~" + Folder;
  Result = NZ(StaticVarGet(VarName));
  if (!Result)
  { Result = IsFolderExists(Folder);
    StaticVarSet(VarName,Result);
  }
  Return Result;
}

Добавить комментарий


Защитный код
Обновить