6

我如何打开一个StreamReader, FILE_SHARE_READ, FILE_SHARE_WRITEFILE_SHARE_DELETE


同样的问题,稍微扩大

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

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

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


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

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

一旦我打开了一个文件StreamReader

var sr = new StreamReader(path);

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

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

除了,出于显而易见的原因,我不能使用FileStream- 必须使用 a StreamReader

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

4

2 回答 2

11

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

于 2012-09-18T14:01:08.273 回答
6

如何使用 FileShare.ReadWrite 打开 StreamReader | 文件共享。删除?

当您解决了 Stream 的问题后,Reader 很容易:

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

当然,这应该被包裹在一个using() { }块中。

于 2012-09-18T14:01:32.213 回答