Estou trabalhando em uma espécie de editor que ao carregar precisa fazer uma análise de um arquivo. Quando essa análise é feita com o seguinte código ela funciona:
// Analysis
for (unsigned int i = 0; i < length;) {
short size = analyze68kInst(buffer + i, i, refs);
if (size == -1)
break;
else if (size == 0) {
size = 2;
}
i += size;
}
Entretanto, quero limitar o tamanho permitido para a alocação do buffer pelo programa (valor definido em MAX_BUF_SIZE), e isso acarreta problemas caso o tamanho do arquivo sejamaior que o buffer. Por isso a necessidade em dividir o acesso em vários menores de acordo com o tamanho máximopermitido ao buffer. Tentei uma função assim assim:
void Analyzer(std::multimap<UINT32, Reference> &refs, const string filePath, const unsigned int entryPoint, const long unsigned int totBytes)
{
ifstream fin(filePath.c_str(), ios::binary);
unsigned long int bytes = totBytes - entryPoint, access = MAX_BUF_SIZE - 20, currByte = entryPoint, i, onePercent = bytes / 100;
unsigned short percentsDone = 0;
UINT8 buffer[MAX_BUF_SIZE];
short size;
if (!fin.is_open()) {
cerr<<"Erro ao abrir"<<endl;
exit(1);
}
cout<<"Analyzing file...";
cout.flush();
do {
if (currByte >= (totBytes - MAX_BUF_SIZE))
break;
fin.seekg(currByte);
fin.read(reinterpret_cast<char *>(buffer), MAX_BUF_SIZE);
for (i = 0; i < (access); i++) {
short size = analyze68kInst(buffer + i, currByte, refs);
if (size == -1) {
break;
}
else if (size == 0)
size = 2;
i += size;
currByte += size;
}
if ((percentsDone) < ((unsigned short)(100 * currByte / totBytes))) {
cout<<setbase(10)<<percentsDone<<'%'<<endl;
cout.flush();
++percentsDone;
}
} while (size != -1);
fin.clear();
fin.seekg(currByte);
fin.read(reinterpret_cast<char *>(buffer), MAX_BUF_SIZE);
access = fin.gcount();
for (i = currByte; i < access; i++) {
size = analyze68kInst(buffer + i, currByte, refs);
if (size == -1)
break;
else if (size == 0)
size = 2;
i += size;
currByte += size;
}cout<<"Done!"<<endl;
fin.close();
}
Essa função apresenta problemas, geralmente, eu sempre crio hipóteses sobre qual deve ser o erro e faço testes para verificá-las, mas, nesse caso, se esgotaram minhas hipóteses. Estou a dias tentando resolver isso no escuro, nunca fiquei sem hipóteses para a causa do problema.
Pergunta
== Douplus ==
Olá a quem lê,
Estou trabalhando em uma espécie de editor que ao carregar precisa fazer uma análise de um arquivo. Quando essa análise é feita com o seguinte código ela funciona:
Entretanto, quero limitar o tamanho permitido para a alocação do buffer pelo programa (valor definido em MAX_BUF_SIZE), e isso acarreta problemas caso o tamanho do arquivo sejamaior que o buffer. Por isso a necessidade em dividir o acesso em vários menores de acordo com o tamanho máximopermitido ao buffer. Tentei uma função assim assim:Essa função apresenta problemas, geralmente, eu sempre crio hipóteses sobre qual deve ser o erro e faço testes para verificá-las, mas, nesse caso, se esgotaram minhas hipóteses. Estou a dias tentando resolver isso no escuro, nunca fiquei sem hipóteses para a causa do problema.
Peço, por favor, que me ajudem!.
Grato
== Douplus ==
Link para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.