Эксклюзивный доступ к файлам в лог-файл с 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
Другие вопросы по тегам