到目前为止,我已经尝试了一切但没有成功。
我想要完成的是,我想打开并锁定文件一段时间。 在我打开并锁定文件后,我尝试打开同一个文件只是为了阅读目的。
string filePath = "test.ini";
// Open and lock the file
FileStream configurationFile = new FileStream(filePath, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);
configurationFile.Lock(1, configurationFile.Length);
// Open the same file just to read it
using (FileStream bufferStream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
using (StreamReader sr = new StreamReader(bufferStream))
{
string line;
while ((line = sr.ReadLine()) != null) // <--- Here I get the error
{
CustomMessageBox.Show(line);
}
}
}
我实际上可以使用FileStream和StreamReader打开文件,但是当使用StreamReader与例如sr.ReadLine()时,它会引发异常,该文件正被另一个进程使用。
正如这里提到的Reading a file used by another process [duplicate],FileShare属性应该是ReadWrite,但这并没有帮助。
此外,我已尝试过所有可用的编码,例如StreamReader(bufferStream, Encoding.*)
,但这些编码也无效。
有什么简单的我可以忽略吗?
答案 0 :(得分:0)
答案 1 :(得分:0)
那是因为根据Windows,您正在构建文件的新句柄。 当文件被锁定时,它不允许其他流获取任何其他句柄。你最好像这样修复你的代码:
using (FileStream bufferStream = new FileStream(filePath, FileMode.Open,
FileAccess.Read, FileShare.ReadWrite))
{
bufferStream.Lock(0L, bufferStream.Length);
using (StreamReader sr = new StreamReader(bufferStream))
{
string line;
while ((line = sr.ReadLine()) != null) // <--- Here I get the error
{
CustomMessageBox.Show(line);
}
}
// dispose lock
bufferStream.Unlock(0L, bufferStream.Length);
}