c# - 我可以同时将多个 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);
}
谁能告诉我为什么会出现这个错误?
错误 = 进程无法访问文件 '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
第二个调用冲突。
推荐阅读
- azure-machine-learning-service - ModuleNotFoundError:Azure ML 管道中没有名为“keras”的模块
- asp.net-core - 如何在 linux 上生成合理大小的 .NET Core 进程的内存转储文件?
- codeigniter - 饼图chart.js未满
- typescript - 从类型中获取泛型类型
- elasticsearch - Kibana:聚合“日期直方图”无法正常工作
- bash - 在 bash 中进行计数和拆分
- asp.net-core - 在 .net Core 中使用 JWT 进行跨域单点登录 (SSO)
- python - 如何恢复不属于主列表的类别名称?
- mongoose - findOneAndUpdate 用于具有两个条件的数组的嵌套对象元素
- javascript - 函数运行而不被调用?