我正在开发一个应用程序,用于检查由单独程序(不是由我编写)对文件所做的更改。
如果检测到更改,则会打开文件,读取最后一行,然后关闭文件。
我正在使用以下代码来确保我的程序不会尝试锁定文件,但只能在读取模式下打开它:
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:
这有什么可能的原因吗?
可能是其他程序以某种方式读取锁定文件,从而阻止我甚至不读它?
答案 0 :(得分:4)
是的,您可以在所谓的独占模式中打开文件。这意味着没有人可以读取或写入该文件。
如果您查看File.Open()
功能。存在参数FileShare
,可以将其设置为None
。