Fru*_*Guy 45 .net c# vb.net file-io
在VB.NET或C#中,我正在尝试读取另一个程序正在使用的文本文件的内容(这就是重点,实际上,我无法停止程序或它停止写入文本文件,并且我想定期读出另一个程序中文本文件中当前的内容.
这是我正在使用的代码(VB.NET)
Dim strContents As String
Dim objReader As StreamReader
objReader = New StreamReader(FullPath)
strContents = objReader.ReadToEnd()
objReader.Close()
Run Code Online (Sandbox Code Playgroud)
或者在C#中:
var objReader = new StreamReader(FullPath);
var strContents = objReader.ReadToEnd();
objReader.Close();
Run Code Online (Sandbox Code Playgroud)
但是,上面引发了IO异常"进程无法访问文件'file.txt',因为它正被另一个进程使用." 在这种情况下是否有任何变通方法?
Dev*_*4.0 69
FileStream logFileStream = new FileStream("c:\test.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
StreamReader logFileReader = new StreamReader(logFileStream);
while (!logFileReader.EndOfStream)
{
string line = logFileReader.ReadLine();
// Your code here
}
// Clean up
logFileReader.Close();
logFileStream.Close();
Run Code Online (Sandbox Code Playgroud)
我会做鱼的.FileShare模式至关重要,您必须允许写共享.这是不可否认的,因为正在编写文件的进程已经获得了写访问权限.StreamReader()构造函数使用FileShare.Read,并且没有使用其他值的选项.相反,使用StreamReader(Stream)构造函数确实是变通方法.
但请注意,此共享模式也会对您的代码产生影响.您无法预测其他进程何时刷新文件.您阅读的最后一行可能只包含一行文本的一部分.当它再次刷新文件缓冲区时,稍后,您将获得该行的其余部分.显然,这可能会弄乱你的逻辑.
小智 5
这取决于FileShare附加到文件的其他应用程序打开文件的方式。当另一个应用程序打开文件时,它FileShare为其他应用程序指定了访问文件的模式。此FileShare模式可能已被读取,写入,两者都被删除,全部被删除或没有。
您必须指定FileShare与其他应用程序指定的模式完全相同的模式。如果另一个应用程序只允许阅读,请使用,FileShare.Read;如果其他应用程序允许阅读和写作,请使用FileShare.ReadWrite。
StreamReader使用仅FileShare.Read模式,因此您已经可以假定那不是正确的模式。因此,尝试使用ReadWrite,如下所示:
FileStream fs = new FileStream(FullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
StreamReader reader = new StreamReader(fs);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31096 次 |
| 最近记录: |