我可以在同一时间将多个FileStream对象制作成一个文件吗



为什么在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);
}

有人能告诉我为什么会出错吗?

error=进程无法访问文件"C:\Users\iP\documents\visual studio 2015\Projects\ConsoleApplication32\ConsoleApplication32\bin\Debug\hello.txt",因为其他进程正在使用该文件。

由于将FileShare.None传递给第二个调用,所以会出现该错误。如果您将其更改为FileShare.ReadWrite以匹配第一个调用,则不会出现此问题。

原因是FileStream构造函数在下面调用CreateFileW,如果您查看该函数的文档,它会指出:

您不能请求与访问模式冲突的共享模式在具有打开句柄的现有请求中指定的。CreateFile将失败,GetLastError函数将返回ERROR_SHARING_VIOLATION

使用FileAccess.ReadWrite作为访问模式的第一个请求中已经有一个打开的句柄,这与第二个调用中的FileShare.None冲突。

因为您的代码从不关闭文件并有一个打开的句柄

如果可以,总是使用using语句,它将flushclose文件

using(var fs = new FileStream(...))
{
// do stuff here
} // this is where the file gets flushed and closed

如果两种方法在同一个文件上工作,则在中传递FileStream

static void mama(FileStream fs )
{
fs .Read(new byte[3], 0, 3);
}

相关内容

  • 没有找到相关文章

最新更新