#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")));
}