Как читать байты файла по смещению байта? - PullRequest
1 голос
/ 08 мая 2020

Если мне дан файл .cmp и байтовое смещение 0x598, как я могу прочитать файл с этого смещения?

Конечно, я могу читать байты файла, как это

byte[] fileBytes = File.ReadAllBytes("upgradefile.cmp");

Но как я могу прочитать его по смещению байта 0x598

Чтобы объяснить немного больше, на самом деле с этого смещения начинаются фактические данные, которые я должен прочитать, а до этого смещения байта это просто данные заголовка , поэтому в основном мне нужно читать файл с этого смещения до конца.

Ответы [ 3 ]

1 голос
/ 08 мая 2020

Попробуйте такой код:

    using (BinaryReader reader = new BinaryReader(File.Open("upgradefile.cmp", FileMode.Open)))
        {
            long offset = 0x598;
            if (reader.BaseStream.Length > offset)
            {
                reader.BaseStream.Seek(offset, SeekOrigin.Begin);
                byte[]fileBytes =  reader.ReadBytes((int) (reader.BaseStream.Length - offset));
            }
        }
0 голосов
/ 10 мая 2020

Если вы не знакомы с Streams, Linq или чем-то еще, у меня есть простейшее решение для вас:

Прочитать весь файл в память (надеюсь, вы имеете дело с небольшими файлами):

byte[] fileBytes = File.ReadAllBytes("upgradefile.cmp");

Подсчитайте, сколько байтов присутствует в массиве после заданного смещения:

long startOffset = 0x598; // this is just hexadecimal representation for human, it can be decimal or whatever
long howManyBytesToRead = fileBytes.Length - startOffset;

Затем просто скопируйте данные в новый массив:

byte[] newArray = new byte[howManyBytesToRead];

long pos = 0;

for (int i = startOffset; i < fileBytes.Length; i++)
{
    newArray[pos] = fileBytes[i];
    pos = pos + 1;
}

Если вы понимаете, как это работает, вы можете посмотреть в Array.Copy метод в документации Microsoft.

0 голосов
/ 08 мая 2020

Не используя ReadAllBytes.

Получить поток, перейти к процессу, прочитать остальные файлы.

Вы в основном жалуетесь на удобный метод, позволяющий читать одну строку целого file - это не то, что вы хотите, игнорируя то, что это просто удобный метод. Обычный способ работы с файлами - их открытие и использование Stream.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...