Raficcha 1 Denunciar post Postado Fevereiro 23, 2009 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
quitZAUMMM 18 Denunciar post Postado Fevereiro 24, 2009 veja com o feof pra ver c da o msm.. Compartilhar este post Link para o post Compartilhar em outros sites
Sil.Miranda 0 Denunciar post Postado Fevereiro 26, 2009 Será que o modo de leitura que está errado? arq = fopen("programa.exe","r+t"); nunca vi esse r+t acho que o certo seria rt+ Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Fevereiro 26, 2009 peraee... eu sempre tentei abrir documentos.. nunca tentei abrir um *.exe Compartilhar este post Link para o post Compartilhar em outros sites
José Enésio 4 Denunciar post Postado Fevereiro 26, 2009 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
gRoOvE 0 Denunciar post Postado Março 1, 2009 feof() é específico pra verificar o fim de um arquivo binário. Compartilhar este post Link para o post Compartilhar em outros sites