|
|
|
| Добрый день, спецам вопросик хочется задать:
Давным давно мучаюсь с функцией проверки файла в сети предприятия.
Объект страданий: Если компьютер, на котором пытаемся искать файл, выключен- ф-ция зависает на 10-25 сек... КАК можно избежать зависания?
Для себя можно и без сети попробовать: У меня комп например Home1
Пишу msgbox fnFileExists("\\home1\входящие\1.txt")
пишет True (файл действ существует)
Пишу msgbox fnFileExists("\\home12\входящие\1.txt")
..висим..... и через 20 сек False......
ЧТО можно предпринять против этих зависаний?
p.s. Самое интересное, если вводить не верный каталог- не виснем, а вот не существующий комп- и висим... При чем тока первый раз.. Если программу не перегружать- больше не висим.. Перегрузили- опять трабла.. | |
|
| |
|
|
|
| Видимо дело в винде в её "ерунде", как ты считаешь?, ах да, ты не знаешь........ | |
|
| |
|
|
|
| Дааа. В винде дело, но люди же как-то от этого уходят в своих проектах?
Эххх ВСЕ что нашел ф-ции проверки файлов и папок перепробовал. Все виснут, т.к. основаны на одном и том же...
Вот же ж.. Так как, ни кто не подскажет?
Люююдиии, плиз приведите здесь свои ф-ции, кто чем пользуется, авось из 10 велосипедов составим 1 супер-лисапед))) | |
|
| |
|
|
|
| неоднократно поднимался вопрос наличия сетевого пути ил компа в сети, но нормального решения так и видел. и пинг используют и WMI и вроде даже API где-то видел.
Задержка есть почти всегда, это видимо связано с организацие протокола NetBios. Видимо заложено что нужно сделать несколько попытнок достучаться до компа с некоторым таймаутом, на случай сетевых проблем. И уж когда несколько попыток закончились неудачей - тогда говорит что нет компа.
Именно по этому отсутсвие папки- быстро (не неужно делать несколько попыток)
На SQL.ru было несколько вариантов | |
|
| |
|
|
|
| ааааааааааааа
получается нужно пока идёт достучание включить задержку на минуточку-другую..
надо что ба программа пока не рыпалась, а передала управление процессом винде........... | |
|
| |
|
|
|
| а вот такой вариантик
ПОИСК файла
Option Explicit
'Created by SCINER: lenar2003@mail.ru
'Функция поиска файлов/папок
Private Const MAX_PATH = 260
Public Enum FindObjectType
fNotFound = 0
fFindFolder = 1
fFindFile = 2
End Enum
Private Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
Private Type WIN32_FIND_DATA
dwFileAttributes As Long
ftCreationTime As FILETIME
ftLastAccessTime As FILETIME
ftLastWriteTime As FILETIME
nFileSizeHigh As Long
nFileSizeLow As Long
dwReserved0 As Long
dwReserved1 As Long
cFileName As String * MAX_PATH
cAlternate As String * 14
End Type
Private Const INVALID_HANDLE_VALUE = -1
Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long
Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
Private Sub Form_Load()
Dim Tmp As String
'Пример
If Find("c:\1.bmp") = fFindFile Then MsgBox "Файл найден"
If Find("c:\WINNT") = fFindFolder Then MsgBox "Папка найдена"
End Sub
'Если путь [Не найден] возвращает 0
'Если путь [Папка] возвращает 1
'Если путь [Файл] возвращает 2
Function Find(ByVal Path As String) As FindObjectType
Dim lRet As Long
Dim W32 As WIN32_FIND_DATA
If VBA.Right$(Path, 1) = "\" Then Path = VBA.Left$(Path, Len(Path) - 1)
lRet = FindFirstFile(Path, W32)
If lRet = INVALID_HANDLE_VALUE Then Exit Function
Call FindClose(lRet)
Find = IIf(W32.dwFileAttributes And vbDirectory, fFindFolder, fFindFile)
End Function
|
| |
|
| |
|
|
|
|
| Сергей Саныч Пасиб)) Но и эта бандура (извиняюсь за терминологию- уж ну Оооочень большая и сложная) - тожА виснет, как и все нормальные программы)))
Пасиб, поковыряю)))
to osmor
Да, Вы правы.. | |
|
| |