Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проверка файла по пути. Проблема зависания.
 
 автор: akkorn   (16.05.2010 в 21:57)   личное сообщение
 
 

Добрый день, спецам вопросик хочется задать:
Давным давно мучаюсь с функцией проверки файла в сети предприятия.
Объект страданий: Если компьютер, на котором пытаемся искать файл, выключен- ф-ция зависает на 10-25 сек... КАК можно избежать зависания?

Для себя можно и без сети попробовать: У меня комп например Home1

Пишу msgbox fnFileExists("\\home1\входящие\1.txt")
пишет True (файл действ существует)

Пишу msgbox fnFileExists("\\home12\входящие\1.txt")
..висим..... и через 20 сек False......

ЧТО можно предпринять против этих зависаний?

p.s. Самое интересное, если вводить не верный каталог- не виснем, а вот не существующий комп- и висим... При чем тока первый раз.. Если программу не перегружать- больше не висим.. Перегрузили- опять трабла..

  Ответить  
 
 автор: час   (17.05.2010 в 00:08)   личное сообщение
 
 

Видимо дело в винде в её "ерунде", как ты считаешь?, ах да, ты не знаешь........

  Ответить  
 
 автор: akkorn   (19.05.2010 в 19:39)   личное сообщение
 
 

Дааа. В винде дело, но люди же как-то от этого уходят в своих проектах?
Эххх ВСЕ что нашел ф-ции проверки файлов и папок перепробовал. Все виснут, т.к. основаны на одном и том же...
Вот же ж.. Так как, ни кто не подскажет?
Люююдиии, плиз приведите здесь свои ф-ции, кто чем пользуется, авось из 10 велосипедов составим 1 супер-лисапед)))

  Ответить  
 
 автор: osmor   (20.05.2010 в 08:10)   личное сообщение
 
 

неоднократно поднимался вопрос наличия сетевого пути ил компа в сети, но нормального решения так и видел. и пинг используют и WMI и вроде даже API где-то видел.
Задержка есть почти всегда, это видимо связано с организацие протокола NetBios. Видимо заложено что нужно сделать несколько попытнок достучаться до компа с некоторым таймаутом, на случай сетевых проблем. И уж когда несколько попыток закончились неудачей - тогда говорит что нет компа.
Именно по этому отсутсвие папки- быстро (не неужно делать несколько попыток)
На SQL.ru было несколько вариантов

  Ответить  
 
 автор: час   (20.05.2010 в 11:26)   личное сообщение
 
 

ааааааааааааа
получается нужно пока идёт достучание включить задержку на минуточку-другую..
надо что ба программа пока не рыпалась, а передала управление процессом винде...........

  Ответить  
 
 автор: час   (20.05.2010 в 12:49)   личное сообщение
 
 

а вот такой вариантик
ПОИСК файла

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

  Ответить  
 
 автор: час   (20.05.2010 в 12:54)   личное сообщение
 
 

  Ответить  
 
 автор: akkorn   (21.05.2010 в 01:26)   личное сообщение
 
 

Сергей Саныч Пасиб)) Но и эта бандура (извиняюсь за терминологию- уж ну Оооочень большая и сложная) - тожА виснет, как и все нормальные программы)))
Пасиб, поковыряю)))

to osmor
Да, Вы правы..

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList