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.OpenRead
与FileStream 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#如何打开文件进行写入并允许其他人读取它的主要内容,如果未能解决你的问题,请参考以下文章