Ich möchte die Codierung eines XML-Dokuments vor der Analyse erkennen. So fand ich auf dem Stapel Überlauf dieses Skript.C# EndOfStream immer wahr - Suche/Position auf 0 funktioniert nicht
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);
}
Aber es funktioniert nicht. Immer bekomme ich EndOfStream
wahr. Aber es ist nicht !!!! -.-
Zum Beispiel habe ich die Zeichenfolge <test></test>
. Beginn: 0, Ende: 13
Wenn ich ReadToEnd
oder MoveToContent
dann ist das Ende erfolgreich erreicht. Die EndOfStream
ist wahr dann.
Wenn ich die Position über Seek
oder Position
-0 (zum Beispiel) dann setzen Sie ein new StreamReader
zeigt immer EndOfStream
ist wahr.
Die Sache ist, dass die uploadStream
ist ein Stream, den ich nicht schließen kann.
Es ist ein SharpZipLib Stream eines HTTP-Upload-Stream. Also kann ich diesen Stream nicht schließen. Ich kann nur damit arbeiten.
Und das Schlimme ist nur, weil Position
und Seek
nicht ... Nur weil ReadToEnd
Relais auf diesen Position
. - Sonst würde es funktionieren. Ich denke!
Vielleicht können Sie sich mit dieser Situation :-)
Vielen Dank im Voraus helfen!
Der Zip-Stream verschleiert das Problem sicherlich. Ein Netzwerk-Stream unterstützt das Suchen nicht und wenn Sie Bytes von ihm lesen, sind sie unwiederbringlich verloren. Es sei denn, Sie puffern sie selbst mit einem MemoryStream. Das kann viel Speicher belegen, Sie müssen es möglicherweise in eine temporäre Datei schreiben. –