Как определить наличие файла? (оказалось нелегко...)

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
PhanKnl
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 27.06.2006 (Вт) 12:32
Откуда: Kinel

Как определить наличие файла? (оказалось нелегко...)

Сообщение PhanKnl » 20.07.2006 (Чт) 11:56

Сразу скажу, в чем проблема. Конечное имеется прекрасная функция Dir. Все здорово, но если файл на локальной машине. А если такой путь например: \\User3\host (c)\2\SetAdm.ini, а сеть при этом пропала, то это вызывает либо зависание, либо тормоз надолго. А это нерпятно. Я тут порылся в книгах, на форумах и вот какие варианты нарыл:

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

'\\User3\host (c)\2\SetAdm.ini
Private Function funDir() As Boolean
On Error GoTo Err_Exit
funDir = True
If Dir$(Me.plEnter) = "" Then funDir = False
Exit Function
Err_Exit:
funDir = (Err.Number = 0)
End Function

Private Function funFileLen() As Boolean
On Error Resume Next
Call FileLen(Me.plEnter)
funFileLen = (Err.Number = 0)
End Function

Private Function funApi() As Boolean
Dim af As Long
af = GetFileAttributes(Me.plEnter)
funApi = (af <> -1)
End Function

Private Function funIn()
On Error GoTo Err_Exit
Dim s As String
ob.FileName = Me.plEnter
s = ob.GetValue("Parametrs", "Start", "0")
MsgBox s
Exit Function
Err_Exit:
funIn = (Err.Number = 0)
End Function

Private Sub Command1_Click()
MsgBox funDir
End Sub

Private Sub Command2_Click()
MsgBox funFileLen
End Sub

Private Sub Command3_Click()
MsgBox funApi
End Sub

Но результат одинаковый... :x
То есть вопрос: как без проблем и быстро определить, что файл не найден (неважно нет файла или сети). Думаю, это пригодиться не только мне. Даже автор "крепких орешков" ничего лучшего не предложил. Не сочтите вопрос глупым :wink:

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 20.07.2006 (Чт) 12:35

Код: Выделить всё
MsgBox CreateObject("Scripting.FileSystemObject").FileExists(sFile)

PhanKnl
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 27.06.2006 (Вт) 12:32
Откуда: Kinel

Сообщение PhanKnl » 21.07.2006 (Пт) 13:04

:roll: Спасибо. Про такой вариант я не подумал. Задержка в общем то есть, но хотябы не вешает программу на долго. Пожалуй это лучший вариант. Во всех случаях задержка видимо связана с поиском в сети на уровне системы, хотя я могу и ошибаться. Но все равно спасибо.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 21.07.2006 (Пт) 21:44

А почему бы тебе просто не открывать файл и не отлавливать ошибку?
Lasciate ogni speranza, voi ch'entrate.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 22.07.2006 (Сб) 0:23

Не представляю себе, как вообще можно проверить наличие файла на сетевом диске, не дожидаясь ответа по сети :roll:
Хоть ошибку отлавливай, хоть что -- всё равно будет задержка.
Изображение


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13

    TopList