WriteByte() in C#

Hallo zusammen,

ich habe folgendes Problem: Ich hab n tool welches mir 9 Bytes nach einander in ein file schreibt, und sobald eine 0 ins file geschrieben wird, sind alle darauffolgenden Bytes ,welche eingetragen wurden, bei der Ausgabe ebenfalls eine 0 ?? Ich post mal den Source, vlt. kann mir jemand helfen..



Code:
const int buffsize = 1024; //größe für databuffer definieren          
static void Main(string[] args)   
{        
      if (File.Exists(@"C:\test\dbversion3") == false)           
        {               
             File.Create(@"C:\test\dbversion3");                                      
         }                      
        Console.ReadKey();                           
      
        Stream writeStream = File.Open(@"C:\test\dbversion3",FileMode.Append); 
        writeStream.WriteByte(0); //v             writeStream.WriteByte(1);                 
        writeStream.WriteByte(8);             writeStream.WriteByte(1);//0              
        writeStream.WriteByte(4);             writeStream.WriteByte(8);               
        writeStream.WriteByte(0);//1             writeStream.WriteByte(4);             
        writeStream.WriteByte(9);               writeStream.Close();                           
        Console.ReadKey();      


        //zu lesende Datei                         
        Stream readStream = File.OpenRead(@"C:\test\dbversion3");              
        int[] buffer = new int[10];             
        int bite;              
        int counter = 0;               
        while ((bite = readStream.ReadByte())> 0 )             
        {                                  

          Console.Write(bite.ToString());                
          buffer[counter] = bite;        
          counter++;                 
        }             
           Console.ReadKey();            
          readStream.Close();                      
 }

Ausgabe: 0000000000 --> Was mach ich falsch??

mfg kalil
 
Hi,

Mir ist das grad ein wenig schleierhaft wie du bei deinem Beispiel überhaupt eine Ausgabe bekommst. ?(

Code:
while ((bite = readStream.ReadByte())> 0 )

Diese Anweisung würde ja bedeuten, dass er nur die Schleife betritt falls du einen Wert > 0 einliest. Dein erstes einzulesendes Zeichen ist jedoch 0.

Was das lesen\schreiben von Files betrifft würde ich an deiner Stelle die Klassen StreamReader\StreamWriter benutzen. ;)

mfg Binäru$
 
Nein, er betritt die Schleife, solange die Zuweisung erfolgreich war. Das ist sie natürlich nur, wenn readStream.ReadByte() erfolgreich war. Ist eine übliche Vorgehensweise eine solche Schleife.
 
Hmm, im Schleifenkopf wird ja in seinem Beispiel immer verglichen ob das eingelesene Byte > 0 ist.
Das ist jedoch gleich beim ersten nicht der Fall.
AFAIK wird das EOF-Zeichen nummerisch als -1 interpretiert.
Also müsste sein Schleifenkopf so aufgebaut sein:

Code:
while ((bite = readStream.ReadByte())!= -1 )
 
Code:
(bite = readStream.ReadByte())

gibt folgendes zurück:

-1 wenn kein weiteres Byte aus dem File gelesen werden kann (EOF erreicht)


>0 wenn ein Byte aus dem File kommt


---> nun aber zu meiner eigentlichen Frage:

Warum sind sobald eine Null eingetragen wird alle darauffolgenden Zahlen ebenfalls 0???
 
Kann es sein das sich deine Ausgabe auf dein bufferarray bezieht?.
Wie gesagt betrittst du die Schleife kein einziges mal, da dein erstes eingelesenes Zeichen nicht >0 ist!

=> laut deinen geposteten Code, keine Ausgabe.
Falls du deine Ausgabe jedoch auf die Werte des Arrays beziehst, wundert mich das Ergebniss nicht.

Code:
int[] buffer = new int[10];
Hier allokierst du Speicher für dein Array. Die einzellnen Stellen werden jedoch nie initialisiert. Dein Array ist also am Programmende nvoll mit 0er.


Ordnest du die Zeichen in deiner File so an: 235023127
Dann wird die Schleife 3 mal durchlaufen. => Arrayinhalt = 2,3,5,0,0,0,0,0,0,0

mfg
 
Zurück
Oben