2014-12-11 5 views
3

이것은 내 질문 here에 대한 속편 로그 파일의 지방을 트리밍에 대한 것입니다.스트림이 읽을 수없는 이유는 무엇입니까?

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

왜 읽을가 아니다 : 마지막 줄에 실패

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); 
    . . . 

가 함께 표시 :

는이 코드가? 파일이 비어 있기 때문에 어쩌면 생각했지만, 줄을 추가하고 여전히 같은 오류 메시지를받습니다.

+2

두 가지 : 1)'OpenWrite'로 다시 열려고하면'File.Create'는 예외를 일으킬 수있는 열린 핸들을 반환합니다. 2)'OpenWrite'는 읽을 수있는 스트림을 반환하지 않습니다. 이름은 암시하기위한 것이므로 서면으로 만 열립니다. –

답변

4

File.OpenWrite은 읽을 수없는 스트림을 만듭니다. 스트림을 읽고 쓰고 싶다면 File.Open(localPath, FileMode.Open, FileAccess.ReadWrite)을 사용해야합니다.

또한 FileMode.OpenOrCreate 만 사용하면 File.Exists 조건부가 필요하지 않습니다.

1

16 진수 오류 코드는 FFFFFFFF80070075이며 E_INVALIDARG - One or more arguments are invalid과 같습니다. 오류 코드의 정의는 http://msdn.microsoft.com/en-us/library/cc704587.aspx을 참조하십시오.

이것을 기반으로 읽을 수없는 스트림 메시지를보고 코드를 보면 공개 호출이 호출시 ReadWrite 파일 액세스 특성을 지정해야합니다.

+0

OpenWrite()가 ReadWrite() 여야 함을 의미한다면 그러한 동물이없는 것 같습니다. –

관련 문제