Entwickler-Ecke
WinForms - Erledigt: Problem mit FileStream und WriteByte
Findus - Do 25.12.08 18:24
Titel: Erledigt: Problem mit FileStream und WriteByte
Hallo zusammen ..
Ich versuche einen
FileStream der aus dem Netz geladen wird mit
WriteByte zu schreiben. Nun möchte ich wenn
ReadByte den zusatand
-1 erreicht aus der while-Schleife auszusteigen. Webb ich das aber wie im Code zu sehen versuche wird nur Müll in das File geschrieben:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
| ...
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(@"http://URL/xxx.csv"); request.Method = "GET"; HttpWebResponse hwrs = (HttpWebResponse)request.GetResponse(); FileStream fs = new FileStream(@"xxx.csv", FileMode.Create, FileAccess.Write); Stream input = hwrs.GetResponseStream();
long summary = hwrs.ContentLength; int section = (int)summary / 100; int progress = 0; int counter = 0;
try { int buffer; while ((buffer = input.ReadByte()) != -1) { fs.WriteByte((byte)input.ReadByte()); ... |
Kurzer Auszug des Mülls :(
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35:
| BAO50;-- BA;87-- 20O;56E8 20B;20E3 20C;58E2 20E;30E3 20F;60E7 20G;44E1 20J;89E1 20N;72E1 20P;22E0 20P;21E7 20Q;42E6 20O;23E2 20M;82E5 20N;43E8 20V;11E7 20S;48E8 20A;24E7 20C;27E6 20L;52E5 20R;46E3 20S;20E5 20T;31E7 20E;49E7 20V;16E7 20J;49E5 20O;97E7 20Z;61E3 20L;14E3 20R;92E3 20S;21E2 20S;34E4 21W;83E1 XVK |
An was könnte das liegen ? Das ich Anfänger bin brauch ich Euch ja nicht zu sagen :)
Gruß Findus
JüTho - Do 25.12.08 18:44
Hallo,
Du musst genau aufpassen (kopiert aus der SDK-Doku, Hervorhebung von mir):
Zitat: |
ReadByte-Methode
Liest ein Byte aus dem Stream und erhöht die Position im Stream um ein Byte, oder gibt -1 zurück, wenn das Ende des Streams erreicht ist. |
Du gehst in der if-Abfrage um 1 Position weiter und zum Speichern nochmals. Das bedeutet, dass nur jedes zweite Byte gespeichert wird und Du nicht korrekt das Ende des Streams abfragst.
Das ist etwas anderes als das, was wir in den letzten Tagen probiert hatten:
Zitat: |
BinaryReader.PeekChar-Methode
Gibt das nächste verfügbare Zeichen zurück, ohne die Byte- oder Zeichenposition zu erhöhen. |
Probiere es einmal so (ohne Gewähr, ich habe noch nicht viel mit Streams gearbeitet), wozu hast Du den buffer vorgesehen:
C#-Quelltext
1: 2: 3: 4: 5:
| int buffer; while ((buffer = input.ReadByte()) != -1) { fs.WriteByte((byte)buffer); |
Gruß Jürgen
Findus - Do 25.12.08 19:26
Hallo Jürgen,
ist schon schlecht wenn man den buffer vorsieht und ihn dann nicht verwendet :) Das schreiben funktioniert nun. Allerdings und du wirst es nicht glauben, der Download wird nochmal durchlaufen .. Irgendwie steig ich da nicht durch.
Gruß Findus
Findus - Do 25.12.08 21:23
Also das mit dem doppelten Download ist schon so eine Sache. Ich habe dieses DownloadForm mal als Stand-Alone Projekt gemacht. Da läut er durch bis zum Ende. Aber das ist eine andere Geschichte. Die eigentliche Frage ist beantwortet und somit auch dieses Thema erledigt.
Gruß Findus
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!