Задать вопрос

Как начать цикл не в перовом байте файла?

Хочу прочитать hex четырех байтов из произвольного файла. Если начинаю читать с начала файла (startByte = 0), то все нормально, но если хочу прочитать из любого другого места (например startByte = 4 / 8 / 10) то возникает эксепшн выхода за пределы массива. В чем может быть проблема?
string[] header = new string[4];
startByte = 0;
length = 4;
using (FileStream stream = File.OpenRead(path))
            {
                try
                {
                    for (int i = startByte; i < length + startByte; i++)
                    {
                        header[i] = (stream.ReadByte().ToString("X2"));
                    }
                }
                catch(Exception e)
                {
                    Console.WriteLine(e.Message);
                }
  • Вопрос задан
  • 94 просмотра
Подписаться 2 Простой Комментировать
Решения вопроса 1
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
/// <summary>
        /// Get bytes from file
        /// </summary>
        /// <param name="path">path to file</param>
        /// <param name="startByte">0 based position</param>
        /// <param name="bytesToRead">Count of bytes to read</param>
        /// <returns></returns>
        public static string[] GetXData(string path, int startByte, int bytesToRead)
        {
            try
            {
                var header = new string[bytesToRead];
                using var stream = File.OpenRead(path);
                stream.Seek(startByte, SeekOrigin.Begin); // перемещаем указатель в позицию
               // увеличиваем от 0 до длины буфера!!!
                for (var i = 0; i < header.Length ; i++)
                {
                     // когда читаем по байту сдвиг указателя происходит автоматически
                    header[i] = (stream.ReadByte().ToString("X2"));
                }
                return header;
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                return new string[0];
            }
        }
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
А для чего к длине файла добавлять startbyte? У вас пооучается длина ыайла +4 и т.д.
Ответ написан
Комментировать
@rPman
В коде отсутствует смещение позиции чтения файла, перед циклом for нужно сделать Seek?

И в цикле ошибка, в условии окончания его зачем то к length прибавляется startByte
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы