为什么在fs2对象中抛出错误?我已经在fs对象
中编写了FileShare.ReadWrite FileStream fs = new FileStream("hello.txt",FileMode.OpenOrCreate,FileAccess.ReadWrite,FileShare.ReadWrite);
mama();
Console.ReadKey();
}
static void mama()
{
FileStream fs2 = new FileStream("hello.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None);
fs2.Read(new byte[3], 0, 3);
}
谁能告诉我为什么会出现这个错误?
错误=该进程无法访问文件'C:\ Users \ iP \ documents \ visual studio 2015 \ Projects \ ConsoleApplication32 \ ConsoleApplication32 \ bin \ Debug \ hello.txt',因为该文件正在被另一个进程使用。>
答案 0 :(得分:0)
因为您的代码永远不会关闭该文件并对其具有打开的句柄
如果可以,请始终使用using
语句,它将flush
和close
文件
using(var fs = new FileStream(...))
{
// do stuff here
} // this is where the file gets flushed and closed
如果两个方法在同一个文件上运行,请在{p> 1中传递
FileStream
答案 1 :(得分:0)
由于将FileShare.None
传递给第二个呼叫,您遇到了该错误。如果将其更改为FileShare.ReadWrite
以匹配第一个电话,则不会有问题。
其原因是因为FileStream
构造函数在下面调用了CreateFileW
,如果您查看该函数的文档,它会指出:
您不能请求与访问模式冲突的共享模式 在具有打开句柄的现有请求中指定的代码。 CreateFile 将失败,并且GetLastError函数将返回 ERROR_SHARING_VIOLATION 。
使用FileAccess.ReadWrite
作为访问方式,第一个请求已经具有打开句柄,与第二个调用中的FileShare.None
冲突。