C# - Stream/FileStream-EOF
Ist jeder, der sich mit einem Weg, um finden heraus, dass Sie am Ende der Datei?
Ich bin mit BinaryReader und versuchte PeekChar - aber es wirft eine exception. Irgendwelche anderen Vorschläge?
Dank.
- Möchten Sie diese arbeiten nur für Dateien (die seekable, glaube ich), oder für streams im Allgemeinen?
- Welche Ausnahme gilt es zu werfen?
- Die Ausgabe char buffer ist zu klein, um enthalten die dekodierten Zeichen, Zeichencodierung 'Unicode (UTF-8)' fallback ' - System.Text.DecoderReplacementFallback'. Parameter name: chars
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vom
Stream
, wenn SieRead(buffer, offset, count)
Sie erhalten ein nicht-positives Ergebnis, und wenn SiePeek()
erhalten Sie ein negatives Ergebnis.Mit einem
BinaryReader
, die Dokumentation deutet darauf hin, dassPeekChar()
zurückkehren sollte, negativ:sind Sie sicher, dass das nicht ein beschädigt stream? d.h. die restlichen Daten nicht bilden ein komplettes
char
aus der angegebenen Codierung?DecoderReplacementFallback
so dassnew BinaryReader(new MemoryStream(new byte[] { 194, 0, 0 })).PeekChar()
wird eine exception werfen (nicht alle illegalen Sequenzen von drei bytes, zu werfen... Zum Beispiel{ 192, 0, 0 }
nichtWenn Ihr stream unterstützt die Suche nach (überprüfen Sie dies mit der BaseStream.CanSeek-Eigenschaft), überprüfen Sie die Position-Eigenschaft des BaseStream, etwa so:
Überprüfen, ob die position des Lesers ist weniger als die Länge der trick funktioniert
Werde ich hinzufügen, mein Vorschlag: wenn Sie nicht brauchen, die "encoding" - Teil der
BinaryReader
(so dass Sie nicht verwenden die verschiedenenReadChar
/ReadChars
/ReadString
), dann können Sie einen encoder verwenden, der nicht ständig werfen und das ist immer ein-byte-pro-char.Encoding.GetEncoding("iso-8859-1")
ist perfekt für diese. Dieiso-8859-1
Kodierung ist eine ein-byte-pro-Zeichen-Codierung, die maps 1:1 alle in den ersten 256 Zeichen von Unicode (also derbyte
254 ist diechar
254 zum Beispiel)