我想打开同一个文件进行阅读和写作。文件指针应该是独立的。因此,读操作不应移动写位置,反之亦然。
目前,我正在使用此代码:
FileStream fileWrite = File.Open (path, FileMode.OpenOrCreate, FileAccess.Write, FileShare.Read);
FileStream fileRead = File.Open (path, FileMode.OpenOrCreate, FileAccess.Read, FileShare.Read);
StreamWriter _Writer = new StreamWriter (fileWrite, new ASCIIEncoding ());
StreamReader _Reader = new StreamReader (fileRead, new ASCIIEncoding ());
但是这会导致IOException:“进程无法访问该文件,因为它正由另一个进程使用”
答案 0 :(得分:4)
我想我自己已经弄清楚了。在第二个File.Open
中,我们通过指定FileShare.Read
来尝试拒绝其他应用程序写入权限。相反,我们需要允许第一个流写入文件:
FileStream fileRead = File.Open (path, FileMode.OpenOrCreate, FileAccess.Read, FileShare.ReadWrite);
这本身就是正确的,因为阅读流不应该关心其他人写文件。至少我不再有例外了。
答案 1 :(得分:1)
我手头没有C#,所以我无法测试它。
你不能只使用FileAccess.ReadWrite而不是FileAccess.Read吗?
编辑:答案是否定的。您需要使用FileShare来执行此操作。