Autor Beitrag
Findus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: Do 25.12.08 18:24 
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:

ausblenden 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:
...

            //  Den Dateiabruf vorbereiten. 
            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();

            //  Berechne die Dateigrößen und den Abschnitt 
            long summary = hwrs.ContentLength;
            int section = (int)summary / 100;
            int progress = 0;
            int counter = 0;

            try
            {
                int buffer;
                while ((buffer = input.ReadByte()) != -1)
                {
                    // Hier download starten
                    fs.WriteByte((byte)input.ReadByte());
                    //  Bytes zählen

...


Kurzer Auszug des Mülls :(

ausblenden volle Höhe 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


Zuletzt bearbeitet von Findus am Do 25.12.08 21:24, insgesamt 1-mal bearbeitet
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: 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:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
int buffer;
while ((buffer = input.ReadByte()) != -1)
{
    fs.WriteByte((byte)buffer);
    // usw.

Gruß Jürgen
Findus Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: 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