Закройте файл, открытый другим процессом - PullRequest
0 голосов
/ 05 июля 2018

Я использую внешний метод для проверки файла XML. Проблема метода заключается в том, что он открывает файл XML и никогда не закрывает его, поэтому мне нужно как-то закрыть файл. Кто-нибудь знает, возможно ли это с VBScript?

1 Ответ

0 голосов
/ 05 июля 2018

ОПАСНОСТЬ! Закрытие дескриптора открытого файла другого процесса может привести к потере данных. Делайте это только тогда, когда вы точно знаете , что вы делаете. Вы были предупреждены.


VBScript не может самостоятельно закрывать дескрипторы файлов, но вы можете использовать для этой цели утилиту командной строки handle.

filename = "C:\path\to\your.xml"

Set sh = CreateObject('WScript.Shell')

Set p = sh.Exec("handle """ & filename & """")
pout = p.StdOut.ReadAll

Set re = New RegExp
re.Pattern    = "pid: (\d+)\s+type: file\s+([a-f0-9]+):"
re.IgnoreCase = True

For m In re.Execute(pout)
    pid = m.Submatches(0)
    hnd = m.Submatches(1)
Next

If Not(IsEmpty(pid) And IsEmpty(hnd)) Then
    sh.Run "handle -c " & hnd & " -y -p " & pid, 0, True
End If

Если утилита отсутствует в вашем PATH, вы должны указать полный путь к программе. Кроме того, программа просит вас принять лицензионное соглашение при первом запуске, поэтому либо запустите его один раз вручную, либо добавьте параметр -accepteula в командную строку (и).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...