Publicada por HugoLinus em 01/04/2007 - 13:24h:
* HugoLinus usa Debian

viva pessoal do vol,

Então é o seguinte:
Eu estava meio esquecido das funções básicas de manipulação de ficheiros em C e precisava fazer um programa que se servisse dessas funções, por isso decidi fazer alguns exemplos básicos (pensava eu) que se servissem dessas funções.
E comecei a fazer então alguns programas simples que me davam o tamanho de um ficheiro, copiavam um ficheiro para outro, etc..(É verdade que nenhum deles tem utilidade real, mas não era esse o objectivo, para já, pois a razão era como disse relembrar a uso destas funções).

eu baseei os meus pequenos programas na hipótese de que o End Of File só apareceria no fim do ficheiro, mas parece que não é bem assim porque em alguns casos a cópia de ficheiro não é concluida.

um dos exemplos que correu mal foi um ebook (pdf) que parou no caractér 2731, bem longe do fim do ficheiro, ora quando eu pedi para imprimir o caracter 2732 como inteiro encontrei o número -1, ou seja EOF (o que achei estranho visto o ficheiro ter 8.8 mb e existir em muitos caracters depois destes), o outro exemplo foi a cópia do próprio executável do ficheiro que vou postar a seguir
que parou no caracter 800 e quando tentei imprimir o caracter 801 como inteiro recebi novamente o número -1 (tendo o ficheiro 5400 bytes ou seja 5400 caracteres).

Ora, a minha dúvida é se o caracter EOF realmente só está presente no fim de um ficheiro ou se em alguns casos pode aparecer noutro local do ficheiro que não o fim. Visto tratar-se de um pdf e de um executável pensei tratar-se de referências a outros ficheiros que farão com que o EOF apareça em outros locais que não o fim do ficheiro.

vou deixar aqui o programa para darem uma olhadela gostaria de saber se pensam que a minha dúvida tem razão de ser ou se o programa simplesmente está mal escrito (o que é uma possibilidade bastante real)

[CODE]
#include <stdio.h>

int main(int argc, char **argv){

char c;
FILE *in_file, *out_file;

if(argc!=2){
printf(" Forma correcta de utilização:ntfilecopy PATHn");
return 1;
}
else{
if((in_file=fopen(argv[1], "r")) == NULL){
printf("Não foi possível abrir o ficheiro %sn", argv[1]);
return 2;
}
else{
out_file=fopen("out", "w+");
while((c=fgetc(in_file)) != EOF){
   fputc(c, out_file);
}
fclose(in_file);
fclose(out_file);
return 0;
}
}
return 0;
}
[CODE]

  
 
Resposta de caiovinic em 01/04/2007 - 15:18h:
* caiovinic usa Debian
* caiovinic tem conceito: 8.2
 


na verdade isso vale para arquivos texto ou binários, que são os que estas funções são preparadas para manipular...

PDF é um padrão da adobe, que não necessariamente tem um apenas EOF no final do arquivo. vale lembrar que EOF é apenas um identificado para um número...
para trabalhar com arquivos .pdf, vc vai ter que procurar a "anatomia" deste tipo de arquivo.
no caso de um .txt, por exemplo (que é o tipo que estas funções são preparadas para manipular), o EOF apareceria no final do arquivo...

qquer coisa, tâmus aê! :-P

  


ATENÇÃO: Antes de contribuir com uma resposta, leia o artigo Qualidade de respostas e certifique-se de que esteja realmente contribuindo com a comunidade. Muitas vezes o ímpeto de contribuir nos leva a atrapalhar ao invés de ajudar.

Contribuir com resposta



CAPTCHA
[ Recarregar imagem ]

Digite o código acima:

  
* Nota: só é possível enviar respostas usuário que possui conta e esteja logado com ela, caso contrário sua mensagem será perdida.



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts