C# File.Create和File.OpenRead和IOException

C# File.Create和File.OpenRead和IOException,c#,ioexception,C#,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); 最后一行

我需要读取一个打开的文件,以便在程序的其他部分写入

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"

请帮助正确配置文件.Open参数。

您需要首先使用.close()方法关闭文件。

第一个流将写入文件,而第二个流只允许读取

FileStream create=File.Open(文件名,FileMode.create,**FileAccess.Write**,FileShare.Read);
FileStream openRead=File.Open(文件名,FileMode.Open,FileAccess.Read,**FileShare.Read**);

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);
ReadWrite
来自MSDN的标志说明:

允许随后打开文件进行读取或写入。如果未指定此标志,则任何打开文件以进行读取或写入的请求(通过此进程或其他进程)都将失败,直到文件关闭


使用
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);

要完成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
获取第一个文件流以进行写访问。写入流允许其他流读取它。在writer流中设置
FileShare.ReadWrite
似乎不安全

读取访问的第二个流需要设置
FileShare.ReadWrite
,因为参数FileShare定义了其他流的权限。如果仅设置
FileShare.Read
,而另一个流已打开以供写入,则读卡器流根本无法满足
FileShare.Read
权限(该权限隐式表示该流不能由另一个流写入)


我认为FileAccess和FileShare这两个参数之间存在着自然的混淆。第一个基本上是您创建的流的权限,第二个是其他任何流的权限。

在读取之前确保文件已关闭。如果您在应用程序的另一部分中打开了该文件,则只需重构该文件以在单个实例/服务中使用它,这样您只需一次打开它。我需要从打开的文件中读取以进行写入。Windows必须允许此操作。@Alex:尝试更改文件共享。读取为文件共享。读写否。我需要从打开的文件中读取以进行写入。Windows必须允许此操作。