如何在ShareDenyWrite模式下打开StreamReader?

时间:2012-09-18 13:57:23

标签: c# streamreader sharing fileshare textreader

如何使用StreamReader打开FILE_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);

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

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

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

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

2 个答案:

答案 0 :(得分:10)

StreamReader has a constructor可以播放视频。因此,不要使用采用字符串路径的构造函数,而是首先使用所需的选项创建FileStream,然后将FileStream传递给StreamReader构造函数。

答案 1 :(得分:4)

  

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

当您解决了Stream的问题后,阅读器很简单:

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

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