为什么我的Stream不可读?

时间:2014-12-11 19:59:16

标签: c# file-io uri filestream streamreader

这是我的问题here的续篇,关于修剪日志文件中的内容。

我有这段代码:

private readonly FileStream _fileStream;
private readonly StreamWriter _streamWriter;

. . .

    const int MAX_LINES_DESIRED = 1000;

    string uriPath = GetExecutionFolder() + "\\Application.log";
    string localPath = new Uri(uriPath).LocalPath;
    if (!File.Exists(localPath))
    {
        File.Create(localPath);
    }
    _fileStream = File.OpenWrite(localPath);
    // First, remove the earliest lines from the file if it's grown too much
    StreamReader reader = new StreamReader(_fileStream);
    . . .

在显示的最后一行失败:

System.ArgumentException was unhandled
  _HResult=-2147024809
  _message=Stream was not readable.

为什么它不可读?我想也许是因为文件是空的,但我添加了一行,并且仍然得到相同的错误消息。

2 个答案:

答案 0 :(得分:4)

File.OpenWrite创建一个不可读的流。如果您要阅读和写入流,则需要使用File.Open(localPath, FileMode.Open, FileAccess.ReadWrite)

此外,您可以使用FileMode.OpenOrCreate,这样就无需使用File.Exists条件。

答案 1 :(得分:1)

十六进制的错误代码为FFFFFFFF80070075,相当于E_INVALIDARG - One or more arguments are invalid。有关错误代码的定义,请参阅http://msdn.microsoft.com/en-us/library/cc704587.aspx

基于此,流不可读消息,并查看代码,看起来open调用应该在调用时指定ReadWrite文件访问属性。