Это похоже на проблему .NET. (Ну, ошибка, если вы спросите меня).
По сути, я повторил проблему, используя следующий многопоточный код:
Dim FS As System.IO.FileStream
Dim BR As System.IO.BinaryReader
Dim FileBuffer(-1) As Byte
If System.IO.File.Exists(FileName) Then
Try
FS = New System.IO.FileStream(FileName, System.IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.Read)
BR = New System.IO.BinaryReader(FS)
Do While FS.Position < FS.Length
FileBuffer = BR.ReadBytes(&H10000)
If FileBuffer.Length > 0 Then
... do something with the file here...
End If
Loop
BR.Close()
FS.Close()
Catch
ErrorMessage = "Error(" & Err.Number & ") while reading file:" & Err.Description
End Try
По сути, ошибка в том, что попытка ЧИТАТЬ файл со всеми различными режимами общего доступа (READ, WRITE, READ_WRITE) абсолютно не влияет на блокировку файла, независимо от того, что вы пытаетесь; вы всегда получите один и тот же результат: он заблокирован и недоступен для любого другого пользователя.
Microsoft даже не признает эту проблему.
Решение состоит в том, чтобы использовать внутренние API-интерфейсы CreateFile Kernel32 для обеспечения правильного доступа, поскольку это гарантирует, что ОС СЛУШАЕТ ваш запрос при запросе на чтение файлов с доступом к заблокированным или заблокированным общим доступом.