Я попытался создать программу, которая загружает куски большого (мы говорим о нескольких МБ) файла и ищет значение и печатает его адрес и значение, кроме моя программа каждые несколько раз бросает myfile, не дает значения, кроме странного символа (хотя я использовал «hex» в cout), адреса кажутся петлями sorta, и, похоже, не все значения вообще. Я пробовал в течение долгого времени, и я сдался, поэтому я спрашиваю, есть ли у кодов программы, чтобы найти проблему. Я должен отметить, что я пытаюсь найти 32-битное значение в этом файле, но все, что я мог сделать, это программа, которая проверяет байты, и мне тоже потребуется помощь.Поиск значения int в большом двоичном файле C++
#include <iostream>
#include <fstream>
#include <climits>
#include <sstream>
#include <windows.h>
#include <math.h>
using namespace std;
int get_file_size(std::string filename) // path to file
{
FILE *p_file = NULL;
p_file = fopen(filename.c_str(),"rb");
fseek(p_file,0,SEEK_END);
int size = ftell(p_file);
fclose(p_file);
return size;
}
int main(void)
{
ifstream myfile;
myfile.open("file.bin", ios::binary | ios::in);
char addr_start = 0,
addr_end = 0,
temp2 = 0x40000;
bool found = false;
cout << "\nEnter address start (Little endian, hex): ";
cin >> hex >> addr_start;
cout << "\nEnter address end (Little endian, hex): ";
cin >> hex >> addr_end;
unsigned long int fsize = get_file_size("file.bin");
char buffer[100];
for(int counter = fsize; counter != 0; counter--)
{
myfile.read(buffer,100);
if(!myfile)
{
cout << "\nAn error has occurred. Bytes read: " << myfile.gcount();
myfile.clear();
}
for(int x = 0; x < 100 - 1 ; x++)
{
if(buffer[x] >= addr_start && buffer[x] <= addr_end)
cout << "Addr: " << (fsize - counter * x) << " Value: " << hex << buffer[x] << endl;
}
}
myfile.close();
system("PAUSE"); //Don't worry about its inefficiency
}
1. Несколько МБ не большой файл :) 2. Вам не нужно использовать старый API C, чтобы получить размер файла: http://stackoverflow.com/a/5840160/634821 –
3. Вы зацикливаете байтовый файл байтом, но читаете его в кусках по 100 байт каждый раз. Учитывая, что ваши файлы на самом деле не так долго, я бы просто обработал байты байтом, без 100-байтового буфера. Путь проще. –
Ваша стоимость 1 байт? Что именно вам нужно делать? –