Что нового

Скорость реакции на изменение папки в сети

Marjel

Новичок
Сообщения
11
Репутация
0
Тащем-то история такая. В папку на другом компе по сетке скрипт кладет файл. Далее он в цикле со Sleep(100) проверяет существует ли этот файл (FileExists). Как только получает @error (в какой-то момент этот файл удаляется) выполняет определенное действие. Допустим Beep. Так вот. Заметил что после удаления файла на другом компе до Beepa проходит пауза 4-5 секунд (для меня критично).
Но при этом! Если я открою эту папку через проводник (на компе номер 1) и оставлю её открытой на рабочем столе, то Beep происходит мгновенно! Файл даже визуально ещё не успевает улететь из папки.

Втф вообще? Получается после удаления файла скрипт ещё какое-то время видит фантом, а проводник если открыть папку через постоянный опрос сразу зачищает хвосты? Или скрипт то файл проверяет каждые 100 милисекунд, а обновление данных о папке по сети приходят с задержкой (опять же если не открыта папка в проводнике)?

Есть какой волшебный пендаль может?

Код:
$testfile=FileOpen('\\netcompname\folder\$test.txt', 1)
FileClose($testfile)
Do
Sleep(100)
Until Not FileExists('\\netcompname\folder\$test.txt')
Beep(1600,150)


Upd. Тоесть нужен какой-то более жесткий чтоли способ проверки существования файла. Так как в данном случае FileExists тупит.
Я уже раздумываю вот над постоянным открытием файла в цикле. Если открылся - закрыть, если не открылся - ExitLoop. Но это же БДСМ какой-то.
 
Автор
M

Marjel

Новичок
Сообщения
11
Репутация
0
:laugh:
ЙУХУУУ, после миллиона экспериментов, я таки победил его!!!
Нашел функцию _Update_Explorer()
Воткнул в скрипт на компе 2, сразу после удаления файла.
Теперь комп 1 видит что файл удалили мгновенно, а не тупит ещё 5 секунд не пойми во что.

Код:
Func _Update_Explorer()
    Local $bOld = Opt("WinSearchChildren", True)
    Local $a = WinList("[CLASS:SHELLDLL_DefView]")
    For $i = 0 To UBound($a) - 1
        DllCall("user32.dll", "long", "SendMessage", "hwnd", $a[$i][1], "int", 0x111, "int", 28931, "int", 0)
    Next
    Opt("WinSearchChildren", $bOld)
EndFunc


Вообще очень полезная штука при работе с файлами и папками по сети. Позволила снять кучу проверок и пауз. Рекомендую)
Всем спасибо за помощь в этом чатике.
 
Верх