[英]File.Create and File.OpenRead and IOException
我需要读取在程序的其他部分中打开的文件
const string fileName = "file.bin";
FileStream create = File.Open(fileName, FileMode.Create, FileAccess.Write, FileShare.Read);
FileStream openRead = File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.Read);
最后一行引发IOException:
"The process cannot access the file because it is being used by another process"
请帮助正确配置File.Open参数。
在两个语句中将FileShare
参数更改为FileShare.ReadWrite
:
FileStream create = File.Open(fileName, FileMode.Create, FileAccess.Write, FileShare.ReadWrite);
FileStream openRead = File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
来自MSDN的ReadWrite
标志描述:
允许随后打开文件进行读写。 如果未指定此标志,则在文件关闭之前,任何打开文件以进行读取或写入(通过此进程或其他进程)的请求都将失败。
要完成Reniuz的答案,您可以这样做:
FileStream create = File.Open(fileName, FileMode.Create, FileAccess.Write, FileShare.Read);
FileStream openRead = File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
注意FileShare.Read
是第一个用于写访问的FileStream。 写入流允许其他流读取它。 在FileShare.ReadWrite
流中设置FileShare.ReadWrite
似乎不安全。
用于读取访问的第二个流有效地需要设置FileShare.ReadWrite
因为参数FileShare定义了其他流的权限。 如果在另一个流已经打开以进行写入时只设置了FileShare.Read
,则读取器流根本无法满足FileShare.Read
权限(隐含地说该流不能由另一个流写入)。
我认为FileAccess和FileShare这两个参数之间存在着自然的混淆。 第一个基本上是您创建的流的权限,第二个是任何其他流。
您需要先使用.Close()方法关闭文件。
第一个流将写入文件,而第二个流只允许读取
FileStream create = File.Open(fileName, FileMode.Create, **FileAccess.Write**, FileShare.Read);
FileStream openRead = File.Open(fileName, FileMode.Open, FileAccess.Read, **FileShare.Read**);
使用FileShare.ReadWrite
:
const string fileName = "file.bin";
FileStream create = File.Open(fileName, FileMode.Create, FileAccess.Write, FileShare.ReadWrite);
FileStream openRead = File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.