如何在SharedWrite模式下打开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

StreamReader有一个可以接受流的构造函数。因此,与其使用采用字符串路径的构造函数,不如先创建一个具有所需选项的FileStream,然后将该FileStream传递给StreamReader构造函数。

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

当你解决了流的问题时,阅读器很容易:

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

当然,它应该被封装在using() { }块中。

相关内容

  • 没有找到相关文章