2010-07-15 3 views
3

Я разрабатываю приложение, которое проверяет изменения, внесенные в файл отдельной программой (не написанной мной).Можно ли заблокировать файл?

Если обнаружено изменение, оно открывает файл, считывает последнюю строку и закрывает файл.

Я использую следующий код, чтобы убедиться, что моя программа не пытается заблокировать файл, но только открывает его в режиме чтения:

FileStream fs = 
    new FileStream(
     _scannerFilePath, 
     FileMode.Open, 
     FileAccess.Read, 
     FileShare.ReadWrite); 
StreamReader sr = new StreamReader(fs); 
var str = sr.ReadToEnd(); 
sr.Close(); 
fs.Close(); 

К сожалению, несмотря на это, я все еще получаю следующую ошибку, когда моя программа пытается прочитать файл:

System.IO.IOException was unhandled 
    Message="The process cannot access the file 'D:\\LSDATA\\IdText.txt' because it is being used by another process." 
    Source="mscorlib" 
    StackTrace: 
     at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 
     at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy) 
     at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share) 
     at LiquorSafe.Verification.Main.CheckLastScannedUser(String changedFileName) 
     at LiquorSafe.Verification.Main.OnChanged(Object sender, FileSystemEventArgs e) 
     at System.IO.FileSystemWatcher.OnChanged(FileSystemEventArgs e) 
     at System.IO.FileSystemWatcher.NotifyFileSystemEventArgs(Int32 action, String name) 
     at System.IO.FileSystemWatcher.CompletionStatusChanged(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* overlappedPointer) 
     at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP) 
    InnerException: 

Есть ли возможная причина для этого?

Не может быть, что другая программа каким-то образом считывает-блокирует файл и тем самым мешает мне даже прочитать его?

ответ

4

Да, вы можете открыть файл в так называемом Исключительный режим. Это означает, что никто, кроме вас, не может читать или писать в этот файл.

Если вы посмотрите на функцию File.Open(). Существует параметр FileShare, который может быть установлен на None.

Смежные вопросы