Я хочу определить кодировку XML-документа перед его разбором. Поэтому я нашел в стеке переполнение этот скрипт.C# EndOfStream всегда верно - поиск/позиция до 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
true. Но это не !!!! -.-
Например, у меня есть строка <test></test>
. Начало: 0, Конец: 13
Если I ReadToEnd
или MoveToContent
, то конец будет успешно выполнен. EndOfStream
: true then.
Если сбросить положение 0 (например) с помощью Seek
или Position
затем через new StreamReader
шоу всегда EndOfStream
является истинным .
Дело в том, что поток uploadStream
- это поток, который я не могу закрыть.
Это SharpZipLib поток потока передачи http. Поэтому я не могу закрыть этот поток. Я могу работать с ним.
И плохо то, только потому, что Position
и Seek
не работают ... Только потому, что ReadToEnd
реле на этой Position
. - Иначе это сработает. Я думаю!
Может быть, вы можете помочь моему в этой ситуации :-)
Большое спасибо заранее!
Почтовый поток, безусловно, смущает проблему. Сетевой поток не поддерживает поиск, и если вы читаете байты из него, то они безвозвратно теряются. Если вы не буферизируете их самостоятельно с помощью MemoryStream. Это может занять много памяти, возможно, вам придется записать ее в файл temp. –