Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Raficcha

Fim do arquivo cedo demais

Recommended Posts

Olá pessoal , agora eu to aprendendo C++ e agora to com um problema cabeludo aqui (pelo menos pra mim).

 

bom tava la eu bem feliz otro dia com uns arquivo de texto aonde eu leio eles byte por byte ate encontrar o tal do EOF.

 

bom resolvi eu fazer uma leitura de uma imagem assim e de um executável, mais ai o programa diz que o EOF ta antes do final do arquivo. Teve um executável de mais de 400 Kb que ele encontro o EOF no 13 byte.. alguem sabe o pq disso..

 

ai em baixo eu vo um código de mais ou menos como que to fazendo:

 

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
	char ch = '0';
	FILE *arq;
	int cont = 0;
	arq = fopen("programa.exe","r+t");
	while (ch != EOF){
		ch = getc(arq);   
		cont ++;
	}
	cout << cont;
	cout << "\n";
	system("PAUSE");
	return EXIT_SUCCESS;
}

ja tentei usa so fopen("programa.exe","r") e nada....

 

quando eu rodo esse programa, pra me mostra até aonde ele leu o arquivo, ele me diz que foi ate o byte 13 (ate o décimo terceiro, nom ate o 'carriage return').... e não é so com esse programa, qualquer programa que eu compile não consegue encontrar o EOF no lugar certo, so arquivo de texto mesmo.

 

 

nota: estou utilizando o Dev c++... ja tentei tambeim colocar "-1" no lugar de EOF e nada, ja tentei usar byte em vez de char

 

caraca.. eu fazia isso com a mão nas costas em Delphi.. mas num guento mais.. eu quero aprende c++.. mas trabalho com arquivos ta sendo uma coisa relativamente complicada

 

helpemegente

Compartilhar este post


Link para o post
Compartilhar em outros sites

peraee...

eu sempre tentei abrir documentos..

nunca tentei abrir um *.exe

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já tentou com rb? Executável é binário então acho que não seria muito vantajoso ler em caracteres... O executável eu não sei como é toda a estrutura, mas por exemplo uma imagem, que é um arquivo binário (você percebe porque se abrir o arquivo no bloco de notas, vai ver muitas letrinhas estranhas e outros códigos porque o bloco de notas lê todos os dados em chars), tem suas maneiras de ser lido, geralmente você começa com uma struct de "header", que são dados importantes do arquivo que se encontram no início dele, como por exemplo dimensões (para que os dados dos pixels não se percam, afinal, uma imagem de 2x10 tem a mesma quantidade de pixels que uma de 10x2), às vezes alguns arquivos usam algumas formas diferentes de dados, por exemplo um arquivo MDL, pode usar vários esquemas de gravar vértices no arquivo, pode gravar apenas a posição xyz do vértice, ou pode gravar junto as normais do vértice, ou pode ainda gravar junto a cor, e dependendo dos dados gravados, será necessária uma struct diferente para ir lendo os vértices.

Voltando ao exemplo da imagem, depois de lido o header, passam a ser lidos os pixels da imagem (não cheguei a estudar sobre arquivos de imagens, mas acredito que os pixels são gravados apenas o esquema de cores RGB de cada um, em ordem).

O header é algo muito relativo, depende muito do tipo de arquivo de imagem que está lendo. Olha só:

http://www.fastgraph.com/help/image_file_header_formats.html

Voltando ao seu problema, concordo com o quitzenom, tente com feof(arq);

Compartilhar este post


Link para o post
Compartilhar em outros sites

feof() é específico pra verificar o fim de um arquivo binário.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.