Исключить первые 'x' байтов двоичных данных из файла при чтении в VB.NET - PullRequest
0 голосов
/ 01 сентября 2018

Я нуб, работающий над двоичными файлами. И это расширение этого вопроса: Чтение 'x' байтов данных

Размер моего двоичного файла, если 1025 КБ , то есть 1049600 байт , который содержит 1024 байта информации заголовка. Я хотел бы прочитать оставшиеся данные только после 1023-го бита, что равно 1048576 байтов .

Как исключить первые 1024 байта ?

Я использую тот же код, но не могу заставить его работать, в моем коде что-то не так?

Dim arraySizeMinusOne = 5
Dim buffer() As Byte = New Byte(arraySizeMinusOne) {}
Using fs As New FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.None)
    fs.Read(buffer, 0, buffer.Length)
    Dim _arraySizeMinusOne = 1048575
    Dim _buffer() As Byte = New Byte(_arraySizeMinusOne) {}
    'Process 1048576 bytes of data here
End Using

1 Ответ

0 голосов

Создайте массив byte длиной всего файла минус, размер, который вы исключаете, и минус 1. Последний 1 состоит в том, что массивы vb отличаются от массивов c #. В vb:

Dim buff() As Byte = New Byte(10) {}

создает массив размером 11 и в c #:

byte[] buff = new byte[10];

создает размер 10!

Using fs As New FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.None)
    Dim buff() As Byte = New Byte(CInt(fs.Length - 1024 - 1)) {}
    Dim buffTotal() As Byte = New Byte(CInt(fs.Length - 1)) {}
    'read all file
    fs.Read(buffTotal, 0, buffTotal.Length)
    If fs.Length > 1024 Then
        'move from 1024 byte to the end to buff array
        Buffer.BlockCopy(buffTotal, 1024, buff, 0, buffTotal.Length - 1024)
    End If
End Using

buffer не подходит, потому что в vb уже существует класс Buffer! Измените его на что-то вроде buff.

...