
В комментарии к IntToStr, StrToInt, TryStrToInt без использования SysUtils пользователь с ником fry предложил мне функцию FileExists.
Я позволил себе её немного сократить, но смысл остался – мы пытаемся открыть файл, если возвращается ошибка (HFILE_ERROR, что есть -1), то скорее всего это из-за того, что файла нет. Если не ошибка, то возвращается handle открытого файла – для дальнейшей с ним работы.
Итак,
function FileExists(param: string): boolean; begin Result:=(_lopen(PChar(param), OF_SHARE_COMPAT) <> HFILE_ERROR); end;
Если handle файла не HFILE_ERROR, то True, иначе False. Единственное, меня здесь смущает одна вещь – открыли мы файл, если он есть, а закрыть и забыли, закрывать надо аналогичной функцией _lclose.
Вот немного модифицированный вариант, рекомендую его:
function FileExists(param: string): boolean;
var
h: integer;
begin
h:=_lopen(PChar(param), OF_SHARE_COMPAT);
Result:=(h <> HFILE_ERROR);
if Result then
_lclose(h);
end;
Еще хочется добавить, что раньше я тоже был в поисках такой функции, и вот мой собственный вариант:
function FileExists(FileName:string):boolean; var FindData: TWin32FindData; begin Result:=(FindFirstFile(PChar(FileName),FindData) <> INVALID_HANDLE_VALUE); end;
Здесь, в отличие от предыдущих вариантов, мы не открываем файл, мне кажется так оптимальнее.
Все функции рабочие, все используют библиотеку kernel32.
С наилучшими пожеланиями, (c) crystalbit, http://parsers.info
Спасибо саноффке за клёвую картинку.
А еще подпишись на rss, отпишись в комментариях, что думаешь по этому поводу и не хмурься