如何在ShareDenyWrite模式下打开StreamReader?

Ian*_*oyd 5 c# sharing fileshare streamreader textreader

如何打开一个StreamReaderFILE_SHARE_READ,FILE_SHARE_WRITE,FILE_SHARE_DELETE


同样的问题,略有扩展

我如何打开一个StreamReader以便我可以读取编码的文本文件,共享选项,以便另一个进程可以读取该文件?

我如何打开一个StreamReader以便我可以读取编码的文本文件,使用共享选项,以便其他进程可以在我阅读时修改该文件?

我如何打开一个StreamReader以便我可以读取编码的文本文件,使用共享选项,以便其他进程可以在我阅读时删除该文件?


同样的问题,稍微扩大一点

在.NET Framework类库中有一个名为的类StreamReader.它是唯一一个用于读取"text"的类,这就是它从抽象基TextReader类中下降的原因.在TextReader/StreamReader允许您指定由您试图打开该文件使用的编码,并可以为您的文件进行解码,并返回Strings文本.

一旦我打开了一个文件StreamReader:

var sr = new StreamReader(path);
Run Code Online (Sandbox Code Playgroud)

文件被锁定,其他进程无法修改删除该文件.我需要的是相当于一个FileStream类的FileShare枚举:

  • :拒绝共享当前文件.在文件关闭之前,任何打开文件的请求(通过此进程或其他进程)都将失败.
  • 读取 ":允许随后打开文件进行读取.如果未指定此标志,则打开文件进行读取(通过此进程或其他进程)的任何请求都将失败,直到文件关闭.但是,即使此标志为如果指定,则可能仍需要其他权限才能访问该文件.
  • 写入:允许随后打开文件进行写入.如果未指定此标志,则在文件关闭之前,任何打开文件以进行写入(通过此进程或其他进程)的请求都将失败.但是,即使指定了此标志,仍可能需要其他权限才能访问该文件.
  • ReadWrite:允许随后打开文件进行读写.如果未指定此标志,则在文件关闭之前,任何打开文件以进行读取或写入(通过此进程或其他进程)的请求都将失败.但是,即使指定了此标志,仍可能需要其他权限才能访问该文件.
  • 删除:允许后续删除文件.

除此之外,由于显而易见的原因,我不能使用FileStream- 必须使用a StreamReader.

我怎样才能打开一个StreamReaderFileShare.ReadWrite | FileShare.Delete

Sea*_*ter 10

StreamReader 有一个可以采取流的构造函数.因此,不是使用采用字符串路径的构造函数,而是首先使用所需FileStream的选项创建一个,然后将其传递FileStreamStreamReader构造函数.


Hen*_*man 5

How can i open a StreamReader with FileShare.ReadWrite | FileShare.Delete ?

When you have solved the problem for a Stream, the Reader is easy:

var fs = new FileStream(fileName, FileMode.Open, FileShare.ReadWrite|FileShare.Delete);
var sr = new StreamReader(fs);
Run Code Online (Sandbox Code Playgroud)

And of course that should be wrapped in a using() { } block.