C# のストリームについてはあまり詳しくありません。現在、ストリーム リーダーに入れて読み込んだストリームがあります。後で他のメソッドでストリーム (同じストリーム オブジェクト) を読み取る必要がありますが、今回はこのエラーが発生します。
System.ArgumentException was unhandled by user code
Message="Stream was not readable."
Source="mscorlib"
StackTrace:
at System.IO.StreamReader..ctor(Stream stream, Encoding encoding, Boolean detectEncodingFromByteOrderMarks, Int32 bufferSize)
at System.IO.StreamReader..ctor(Stream stream)
at ExtractTitle(Stream file) in :line 33
at GrabWebPage(String webPath) in :line 62
at lambda_method(ExecutionScope , ControllerBase , Object[] )
at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClassa.<InvokeActionMethodWithFilters>b__7()
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)
InnerException:
したがって、ストリームを読み取ると最後まで進むのではないかと考えています。その後、再度読み取ろうとすると、ストリームの最後にあるため、このエラーが発生します。
それで、誰かこれについて何か説明できますか?
ありがとう
ベストアンサー1
ストリームを最後まで読むと、具体的にはStreamReader
のReadToEnd
方法、あなたはSeek
最初に戻ります。これは次のように実行できます。
StreamReader sr = new StreamReader(stream);
sr.ReadToEnd();
stream.Seek(0, SeekOrigin.Begin); //StreamReader doesn't have the Seek method, stream does.
sr.ReadToEnd(); // This now works