[vb.net] Fehler bei Stream.Read abfangen

Andreas Dunstheimer

Erfahrenes Mitglied
Hallo Community,

ich habe mal wieder ein kleines Problem: Ich versuche mich gerade an einem kleinen Programm, welches von einem Datenträger (CD oder DVD) sämtliche Dateien einliest, und die Dateinamen sowie die CRC32-Checksumme in eine Datenbank schreibt. (Das Programm schreibt noch einige andere Werte in die Datenbank, die aber hier jetzt nicht relevant sind)

Die CRC32-Checksumme wird über eine Funktion berechnet (ich hab die irgendwo im Internet gefunden), die über System.IO.Stream.Read die Datei "Stückchenweise" einliest, und die Checksumme berechnet. Soweit so gut.

Wenn jetzt allerdings eine Datei nicht vollständig lesbar ist (z.B. durch einen Defekt auf dem Datenträger ... "Kratzer auf der CD"), dann versucht das Programm immer wieder erneut, den defekten Teil zu lesen, und geht nicht mehr weiter ...

Hier mal der relevante Teil aus meinem Programm:

Code:
    Private crc32Table() As Integer
    Private Const BUFFER_SIZE As Integer = 1024


    Public Function GetCrc32(ByRef stream As System.IO.Stream) As Integer

        Dim crc32Result As Integer
        crc32Result = &HFFFFFFFF

        Dim buffer(BUFFER_SIZE) As Byte
        Dim readSize As Integer = BUFFER_SIZE
        Dim count As Integer = stream.Read(buffer, 0, readSize)
        Dim i As Integer
        Dim iLookup As Integer
        Dim tot As Integer = 0
        Try
            Do While (count > 0)
                For i = 0 To count - 1
                    iLookup = (crc32Result And &HFF) Xor buffer(i)
                    crc32Result = ((crc32Result And &HFFFFFF00) \ &H100) And 16777215 ' nasty shr 8 with vb :/
                    crc32Result = crc32Result Xor crc32Table(iLookup)
                Next i
                count = stream.Read(buffer, 0, readSize)
            Loop
        Catch ex As Exception
            Debug.Print(ex.Message)
        End Try

        GetCrc32 = Not (crc32Result)

    End Function


Wie bekomme ich es hin, daß bei einer nicht lesbaren Datei nach z.B. 10 erfolglosen Zugriffsversuchen eine Fehlermeldung generiert wird, und das Programm bei der nächsten Datei weitermacht ?

Gruß Dunsti
 

Neue Beiträge

Zurück