Чтение от «start» до «stop» в виде шестнадцатеричных значений из необработанного файла с использованием FileStream

#c#

#c#

Вопрос:

Я хочу прочитать от «start» до «stop» из файла raw-изображения, который я создал с помощью FKT Imager.

У меня есть код, который работает, но я не знаю, лучший ли это способ сделать это?

 // Read file, byte at the time (example 00, 5A)
int start = 512;
int stop = 3345332;

FileStream fs = new FileStream("file.001", FileMode.Open, FileAccess.Read);
int hexIn;
String hex;
String data = "";

fs.Position = start;
 for (int i = 0; i < stop; i  ) { // i = offset in bytes
     hexIn = fs.ReadByte();

     hex = string.Format("{0:X2}", hexIn);
     data = data   hex;
 } //for
 fs.Close();

Console.Writeline("data="   data);
  

Комментарии:

1. Используйте StringBuilder вместо строки для data , чтобы избежать большого выделения памяти для временных строк.

2. » но я не знаю, лучший ли это способ сделать это?» это всегда зависит от вашей цели. Ваша цель — получить огромную строку шестнадцатеричных значений?

3. «код… работает, … лучший способ сделать это» = codereview .

Ответ №1:

Вы хотите прочитать диапазон байтов из файла. Почему бы не прочитать все байты за один раз в массив, а затем выполнить преобразование?

     private string ReadFile(string filename, int offset, int length)
    {
        byte[] data = new byte[length];

        using (FileStream fs = new FileStream(filename, FileMode.Open))
        {
            fs.Position = offset;
            fs.Read(data, 0, length);
        }

        return string.Join("", data.Select(x => x.ToString("X2")));
    }