C#如何打开文件进行写入并允许其他人读取它

Posted

技术标签:

【中文标题】C#如何打开文件进行写入并允许其他人读取它【英文标题】:C# how to open file for writing and allow others to read it 【发布时间】:2021-03-25 23:14:59 【问题描述】:

我正在做以下事情:

var streamWriter = new FileStream("foo.bin", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Read);

因此,我想打开 foo.bin(或者如果它不存在则创建它);我想从 streamWriter 读取和写入它,并且我希望其他人能够打开它进行读取。但是当我随后这样做时:

var streamReader = File.OpenRead("foo.bin");

我收到异常进程无法访问文件“foo.bin”,因为它正被另一个进程使用。

什么给了?我确实希望其他人能够打开它进行阅读...

【问题讨论】:

你是否在同一个进程中做这两个? @Ben yup,同样的过程 【参考方案1】:

这个链接很好开始 [博客]:https://csharp.net-tutorials.com/file-handling/reading-and-writing/“点击此处获取解决方案”

对于相同的流:: [博客]:Read and write to a file in the same stream“点击此处获取解决方案

【讨论】:

【参考方案2】:

这是因为File.OpenReadFileStream reader = new FileStream("file", FileMode.OpenOrCreate, FileAccess.Read, FileShare.Read); 相同,并且之前的 FileStream 已将其打开以进行读写。因此,它上面的文件共享将失败。试试这个而不是File.OpenRead()

FileStream reader = new FileStream("File", FileMode.OpenOrCreate, FileAccess.Read, FileShare.ReadWrite);

这是 File.OpenRead 文档的链接 https://docs.microsoft.com/en-us/dotnet/api/system.io.file.openread?view=net-5.0

【讨论】:

我不确定我是否理解这一点。首次创建文件时,它表示任何人都可以访问它(FileShare.Read),即从文件中读取。但是在没有异常的情况下打开它的唯一方法是请求读/写(FileShare.ReadWrite)权限?它确实有效:) 在第一个流中,您打开它并允许该流从中读取和写入,而其他流只能从中读取。第二个流允许自己只读取,但其他人可以从中读取和写入。我正在运行一个快速测试,看看这是否适用,即使它在 2 个不同的进程中,或者它只是一个怪癖。 是的,它跨进程。我假设它是因为第二个流无法将文件共享设置为只读,因为它已经被前一个打开读取和写入。

以上是关于C#如何打开文件进行写入并允许其他人读取它的主要内容,如果未能解决你的问题,请参考以下文章

Python对文件进行编辑

如何在 C# .NET 中保持 TCP 连接打开并执行多次写入/读取?

c# 将字符串以二进制形式写入文件

C#读取并写入XML文件

写入/读取文本文件 (C#)

有关文件读取写入 和两种文件打开模式的理解