如何在ShareDenyWrite模式下打开StreamReader?

如何使用FILE_SHARE_READFILE_SHARE_WRITEFILE_SHARE_DELETE打开StreamReader


同样的问题,略有扩展

如何打开StreamReader以便我可以读取带有共享选项的编码文本文件,以便其他进程可以读取该文件?

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

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


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

在.NET Framework类库中,有一个名为StreamReader的类。 它是唯一一个用于读取“text”的类 ,这就是为什么它来自抽象基类TextReader类。 TextReader/StreamReader允许您指定您尝试打开的文件所使用的编码,并可以为您解码文件,返回文本Strings

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

 var sr = new StreamReader(path); 

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

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

除此之外,由于显而易见的原因,我无法使用FileStream – 必须使用StreamReader

如何使用FileShare.ReadWrite | FileShare.Delete打开StreamReader FileShare.ReadWrite | FileShare.Delete

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

如何使用FileShare.ReadWrite打开StreamReader FileShare.Delete?

当您解决了Stream的问题后,Reader很简单:

 var fs = new FileStream(fileName, FileMode.Open, FileShare.ReadWrite|FileShare.Delete); var sr = new StreamReader(fs); 

当然,它应该包含在using() { }块中。