是否可以读取文件?

我正在开发一个应用程序,它检查由单独的程序(不是由我编写)对文件所做的更改。

如果检测到更改,则会打开文件,读取最后一行,然后关闭文件。

我正在使用以下代码来确保我的程序不会尝试锁定文件,但只在读取模式下打开它:

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: 

这有什么可能的原因吗?

可能是其他程序以某种方式读取锁定文件,从而阻止我甚至读取它?

是的,您可以在所谓的独占模式下打开文件。 这意味着没有人可以读取或写入该文件。

如果你看一下File.Open()函数。 存在参数FileShare ,可以设置为None