구문 분석하기 전에 XML 문서의 인코딩을 검색하려고합니다. 그래서 스택 에서 오버플로이 스크립트를 발견했습니다.C# EndOfStream 항상 true - 0으로 탐색/위치가 작동하지 않음
public static XElement GetXMLFromStream(Stream uploadStream)
{
/** Remember position */
var position = uploadStream.Position;
/** Get encoding */
var xmlReader = new XmlTextReader(uploadStream);
xmlReader.MoveToContent();
/** Move to remembered position */
uploadStream.Seek(position, SeekOrigin.Begin); // with "pos" = 0 it not works, too
uploadStream.Seek(position, SeekOrigin.Current); // if I remove this I have the same issue!
/** Read content with detected encoding */
var streamReader = new StreamReader(uploadStream, xmlReader.Encoding);
var streamReaderString = streamReader.ReadToEnd();
return XElement.Parse(streamReaderString);
}
하지만 작동하지 않습니다. 항상 얻을 수 EndOfStream
사실. 그러나 그것은 !!!!가 아니다! -.-
예를 들어 문자열이 <test></test>
입니다. 시작 : 0, 끝 : 13
ReadToEnd
또는 MoveToContent
이면 끝까지 성공적으로 처리됩니다. EndOfStream
은 사실입니다. I (예) 0 Seek
또는 Position
통해 위치를 재설정하면
이어서 new StreamReader
방송 항상 EndOfStream
은 사실이다.
것은 uploadStream
은 닫을 수없는 스트림입니다.
http 업로드 스트림의 SharpZipLib 스트림입니다. 따라서이 스트림을 닫을 수는 없습니다. 나는 그걸로 만 일할 수있다.
그리고 Position
및 Seek
이 Position
에 ... 때문 ReadToEnd
릴레이를 작동뿐만 아니라 때문에 나쁜 일이다. - 그렇지 않으면 효과가있다. 나는 생각한다!
아마 당신은이 상황
가 사전에 대단히 감사 :-) 내를 도울 수 있습니다!
Zip 스트림은 분명히 문제를 혼란스럽게합니다. 네트워크 스트림은 검색을 지원하지 않으므로 바이트를 읽으면 다시 검색 할 수 없게됩니다. MemoryStream을 사용하여 직접 버퍼링하지 않는 한. 많은 메모리가 필요할 수 있습니다. 임시 파일에 써야 할 수도 있습니다. –