Программирование
Веб программирование

Как проверить, существует ли файл? (API)

 
 

Option Explicit
Private Const FILE_ATTRIBUTE_DIRECTORY = &H10

Private Declare Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA" (ByVal lpFileName As String) As Long


Function FileExists(path As String) As Boolean
  Dim FA As Long
  FileExists = False
  FA = GetFileAttributes(path)
  If FA <> &HFFFFFFFF Then
    FileExists = (FA And vbDirectory) = 0
  End If
End Function


Есть вопросы? Спроси на нашем форуме!!
pjp07190 [07.11.2014 15:49]

Можно значительно проще без kernel32.

Function fileExists(p As String) As Integer
On Error GoTo merror
fileExists = 0
If Dir(p) "" Then
fileExists = 1
End If
Exit Function
m
error:
MsgBox "Ошибка!!!"
End Function

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

Stertor370 [07.11.2014 17:58]

Я пытаюсь приобщить народ к изучению API.
Но ты прав. Можно было значительно проще:

Function fileExists(p As String) As Boolean
fileExists = Dir(p)знакменьшезнакбольше""
End Function

бесполезно ловить в функции исключения при вызове Dir - она их не кидает.

pjp07190 [11.11.2014 08:32]

Попробуй дать строку типа "DD:...."

Stertor370 [11.11.2014 15:06]

Один ноль в твою пользку: кидает исключения.
Правильный вариант будет такой:


Function fileExists(p As String) As Boolean
On Error Resume Next
fileExists = Dir(p) ЗнакМеньшеЗнакБольше ""
End Function

Я недолюбливаю обертки, за нестандартное поведение, и почти не пользуюсь ими. Гораздо лучше вызывать API напрямую. От этого никуда не деться и рано или поздно придётся столкнуться с этим.

"Кроме того, приведенная функция ничего не говорит, если ошибка в задании пути."
И не должна. Если же есть необходимость в этом, нужно проверять GetLastError и обертывать его в исключение.




Оставлять комментарии можно только зарегистрированным




Предупреждение: Вся информация представлена исключительно в образовательных целях.
Ни авторы, ни администрация не несут ответственности в случае ее использования в противозаконных целях.