none
Auslesen eines FileStream RRS feed

  • Frage

  • Hallo zusammen,

    bei einen Kopiervorgang von Daten aus einem FileStream ist mir aufgefallen das ich nicht alle Bytes erhalte.

    Zur Erklärung: ST ist ein FileStream Object und _Request.XSR ist ein XMLTextWriter - Object.

    ST.Length liefert die Zahl 781. Das entspricht auch der Dateigröße. Die Schleife läuft entsprechend acht mal durch. Jeweils werden 100 Bytes gelesen. Am Ende zeigt CopyLength jedoch nur 773 Bytes an. Mir fehlen also 8 Bytes. Wo sind die mir verloren gegangen?

    Bei den Durchgängen Zeit L sieben mal 100 Bytes an und im letzten achten Durchlauf 73 Bytes.

    Ich danke schonmal für Antworten.

     

    Ich benutze folgenden Programmcode :

     

    Dim CopyLength As Integer = 0
    ST.Position = 0
    
    Do Until ST.ReadByte = -1
      Dim Buffer(99) As Byte
      Dim L As Integer = ST.Read(Buffer, 0, 100)
    
      'If L = 0 Then Exit Do
    
      CopyLength += L
    
      _Request.XSR.WriteBinHex(Buffer, 0, L)
    Loop
    

     

    Freitag, 25. Februar 2011 19:11

Antworten

  • Die Zeile

    Do Until ST.ReadByte = -1

    liest jedes Mal ein Byte. Du sagt die Schleife wird 7 mal durchlaufen. Da ST.ReadByte vor dem Schleifendurchlauf aufgerufen wird, wird diese Zeile genau 8 Mal durchlaufen. Dir geht also genau 8 Bytes verloren.


    Andreas Miceli - Author of the Advanced Admin Console AddIn
    • Als Antwort markiert Velbert Samstag, 26. Februar 2011 08:17
    Freitag, 25. Februar 2011 20:17

Alle Antworten

  • Die Zeile

    Do Until ST.ReadByte = -1

    liest jedes Mal ein Byte. Du sagt die Schleife wird 7 mal durchlaufen. Da ST.ReadByte vor dem Schleifendurchlauf aufgerufen wird, wird diese Zeile genau 8 Mal durchlaufen. Dir geht also genau 8 Bytes verloren.


    Andreas Miceli - Author of the Advanced Admin Console AddIn
    • Als Antwort markiert Velbert Samstag, 26. Februar 2011 08:17
    Freitag, 25. Februar 2011 20:17
  • Stimmt an diese Stelle hab ich gar nicht gedacht. Danke für die Antwort.

     

    Hab es jetzt so gelöst :

    Do Until ST.Position >= ST.Length
    

    Samstag, 26. Februar 2011 08:16