C#: FileStream.Read() spielt die Datei nicht Lesen bis zum Ende, aber gibt 0 zurück
Hier ist, wie ich es mache:
static void Main(string[] args)
{
string FileName = "c:\\error.txt";
long FilePosition = 137647;
FileStream fr = new FileStream(FileName, FileMode.Open);
byte[] b = new byte[1024];
string data = string.Empty;
fr.Seek(FilePosition, SeekOrigin.Begin);
UTF8Encoding encoding = new UTF8Encoding();
while (fr.Read(b, 0, b.Length) > 0)
{
data += encoding.GetString(b);
}
fr.Close();
string[] str = data.Split(new string[] { "\r\n" }, StringSplitOptions.None);
foreach (string s in str)
{
Console.WriteLine(s);
}
Console.ReadKey();
}
Den str-array endet mit diesen Zeilen:
***** Geschichte für die hand-T5-2847880-18 (TURNIER: S-976-46079) *****
Start-hand: Tue Aug 11 18:14
aber es sind mehr Zeilen in der Datei.
Habe ich hochgeladen error.txt auf sendspace: http://www.sendspace.com/file/5vgjtn
Und hier ist die vollständige Ausgabe in der Konsole: the_same_site/Datei/k05x3a
Bitte Hilfe!!! Ich bin echt ratlos hier.
Vielen Dank im Voraus!
InformationsquelleAutor | 2009-08-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dein code hat einige subtile Fehler und Probleme, in:
GetString(b)
TextReader
(z.B.StreamReader
) zum Lesen von text-Daten, die Vermeidung dieser Art von problem.using
- Richtlinie)StringBuilder
Wie andere haben darauf hingewiesen,
- Datei.ReadAllLines
möchte vermeiden, eine Menge von dieser Arbeit. Es gibt auch- Datei.ReadAllText
, undTextReader.ReadToEnd
für nicht-Dateien.Schließlich, verwenden Sie einfach
Encoding.UTF8
anstatt eine neue Instanz zu erstellen, es sei denn, Sie wirklich brauchen, zu zwicken, einige Optionen.InformationsquelleAutor Jon Skeet
Technisch nicht eine Antwort auf deine Frage, aber könnten Sie alle ersetzen, mit:
Bearbeiten (wie versprochen):
Statt fehlt ein Stück, es scheint mir, dass Sie ein Duplikat des letzten Teil. Du bist nicht das Lesen eines vollen 1024 bytes aus der Datei, aber Sie drehen sich alle 1024 bytes in eine Zeichenfolge und anzuhängen.
Deine Schleife sollte wie folgt statt:
Andere als das: was Jon sagte 🙂
InformationsquelleAutor Thorarin
Nicht warum Sie sich das Leben einfacher machen-und tun dies?
InformationsquelleAutor Eric J.
Möglicherweise ist es für Sie wesentlich einfacher zu benutzen Sie einfach die Datei.ReadLines(). Überspringen Sie die Zeilen, die Sie nicht kümmern, anstatt die position.
Konnte man auch mit dem StreamReader, können Sie wickeln Sie den stream nach dem einstellen seiner position, dann verwenden Sie die ReadLine () - Methode.
InformationsquelleAutor John Fisher