为什么我的Stream不可读?

这是我的问题的续集,关于修剪日志文件中的脂肪。

我有这个代码:

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. 

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

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

此外,您可以使用FileMode.OpenOrCreate ,这将消除您的File.Exists条件的需要。

hex的错误代码是FFFFFFFF80070075 ,它等同于E_INVALIDARG - One or more arguments are invalid 。 有关错误代码的定义,请参见http://msdn.microsoft.com/en-us/library/cc704587.aspx 。

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