Эксклюзивный доступ к файлам в лог-файл с VBScript и FileSystemObject
У меня есть сценарий VBS, который в настоящее время пишет в файл журнала. Этот сценарий может быть запущен из нескольких моих одновременных процессов, так что теперь я беспокоюсь о параллелизме.
Я сейчас пользуюсь FileSystemObject
открыть и написать в этот файл. FSO поддерживает эксклюзивный доступ к файлам?
3 ответа
Да, FileSystemObject поддерживает эксклюзивный доступ к файлам. Если при вызове OpenTextFile другой процесс заблокировал файл, вы получите сообщение об ошибке (ошибка отказа в разрешении). Вы должны быть в состоянии перехватить ошибку и обработать ее соответствующим образом (убедитесь, что Err.Number <> 0 после вызова OpenTextFile - это единственный способ сделать это).
Я не знаю, насколько доступный для вас API Windows, но вы должны взглянуть на инфраструктуру отладки в Windows API.
Здесь есть хорошая статья о Project Code. В основном, используя OutputDebugString и перехватывая его с помощью DebugView или передавая его в файл, вы снимаете проблему с блокировкой файла журнала, а также удаляет узкое место нескольких сценариев, поставленных в очередь для записи в файл журнала.
Надеюсь это поможет.
Если это вообще возможно, я рекомендую вам закрыть дескриптор и открывать его каждый раз, когда вам нужно записать файл, чтобы избежать возможных проблем с эксклюзивным доступом к файлу. Пример:
set objFile = objFSO.OpenTextFile("somefile.txt",8,True)
objFSO.WriteLine "jfdskfdkls"
objFSO.Close
'something something
set objFile = objFSO.OpenTextFile("somefile.txt",8,True)
objFSO.WriteLine "gfdgfdgfd"
objFSO.Close
'something else
set objFile = objFSO.OpenTextFile("somefile.txt",8,True)
objFSO.WriteLine "ddsgfgdfsgdfs"
objFSO.Close