[VB.Net] Inlezen binary file in stappen geeft foutmelding

Pagina: 1
Acties:

  • Rarz
  • Registratie: Januari 2001
  • Laatst online: 17-01 20:28
Hallo, zit een beetje te freubelen in VB.Net. Probeer een Windows Forms applicatie te maken die uiteindelijk een aan te wijzen bestand in begint te lezen en vervolgens alle ASCII tekens eruit vist die woorden zouden kunnen zijn.

Stap 1 is het inlezen van de bron, om vervolgens elke chunk te kunnen parsen voor mogelijke woorden (een filtering van drie opeenvolgende ASCII tekens tussen 32-128 of zo). Probleem is echter dat na de eerste loop er een foutmelding verschijnt:

An unhandled exception of type 'System.ArgumentException' occurred in mscorlib.dll

Additional information: Offset and length were out of bounds for the array or count is greater than the number of elements from index to the end of the source collection.


De array is 101 elementen, de offset is 100, count is 100 als de loop voor de tweede keer bij de read instructie aankomt en krak gaat. Ik zie zo 1-2-3 niet waarom. Iemand met ideeen? Ik weet dat ik eroverheen lees, en ongetwijfelt iets doms doe, maar goed... :)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        If File.Exists(filenamebox.Text) Then

            Dim fs As FileStream = New FileStream(filenamebox.Text, FileMode.Open, FileAccess.Read)
            Dim i As Integer
            Dim nBytes As Integer = 100
            Dim ByteArray(nBytes - 1) As Byte
            Dim nBytesRead As Integer

            For i = 0 To fs.Length Step nBytes
                If i + nBytes > fs.Length Then
                    fs.Read(ByteArray, i, fs.Length - i)
                Else
                    fs.Read(ByteArray, i, nBytes)
                End If

                scannedtext.Text = scannedtext.Text + System.Text.Encoding.UTF8.GetString(ByteArray)

            Next

        End If

    End Sub

When in question, when in doubt, run in circles, scream and shout.


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 11:06

Janoz

Moderator Devschuur®

!litemod

Dim ByteArray(nBytes - 1) As Byte
Dit lijkt me eerder een array met slechts 99 elementen.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Rarz
  • Registratie: Januari 2001
  • Laatst online: 17-01 20:28
Okay, gevonden. Het moet niet i zijn, maar 0. De offset is voor de array waarin je de chunks laad, en niet voor het bestand waaruit je data ophaalt.

De -1 had overigens niet in het gepaste stukje code moeten staan. :)

code:
1
2
3
4
5
                If i + nBytes > fs.Length Then
                    fs.Read(ByteArray, 0, fs.Length - i)
                Else
                    fs.Read(ByteArray, 0, nBytes)
                End If

When in question, when in doubt, run in circles, scream and shout.


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 12-02 21:39

TeeDee

CQB 241

Hmm, kan door slaapgebrek komen, maar doordat je die 0 zet, blijf je toch iedere keer het begin van je file uitlezen?

Heart..pumps blood.Has nothing to do with emotion! Bored


  • Korben
  • Registratie: Januari 2001
  • Laatst online: 14-11-2025

Korben

() => {};

TeeDee schreef op donderdag 12 oktober 2006 @ 09:48:
Hmm, kan door slaapgebrek komen, maar doordat je die 0 zet, blijf je toch iedere keer het begin van je file uitlezen?
Komt waarschijnlijk door slaapgebrek :)
Visual Basic .NET:
1
2
3
4
5
Public Overrides Function Read ( _
    <In> <Out> array As Byte(), _
    offset As Integer, _
    count As Integer _
) As Integer
array
When this method returns, contains the specified byte array with the values between offset and (offset + count - 1) replaced by the bytes read from the current source.

offset
The byte offset in array at which the read bytes will be placed.

count
The maximum number of bytes to read.

[ Voor 6% gewijzigd door Korben op 13-10-2006 03:32 ]

.oisyn: Échte programmeurs haten PHP met een passie. Ben jij soms geen echte programmeur?