Pagina 1 di 1
[Risolto][C] Problema Copia file Byte a Byte
Inviato: giovedì 23 settembre 2010, 23:27
da Feazzu
salve a tutti..
avrei un problema che non so come risolvere...
in questo codice che vi passo, faccio la copia byte a byte da un file in input su un file che creo....
Codice: Seleziona tutto
#include <stdlib.h>
#include <stdio.h>
int main (int argc, char *argv[]){
FILE *fpout;
if((fpout = fopen("copiaprova.txt","wb")) == NULL)
fputs("Errore creazione file decompresso",stderr);
FILE *fpin;
if((fpin = fopen(argv[1],"rb")) == NULL)
fputs("Errore apertura file originale",stderr);
while(!feof(fpin))
printf("%x\t",fputc(fgetc(fpin),fpout));
fclose(fpin);
fclose(fpout);
}
solo che nella copia, alla fine del nuovo file (copiato correttamente), viene aggiungo un byte 0xff prima dell EOF...
avete qualche soluzione!? sono disperato.. >:(
vi ringrazio per l'attenzione...
Re: [C] Problema Copia file Byte a Byte
Inviato: giovedì 23 settembre 2010, 23:32
da Zoff
mi sa che fgetc() restituisce -1 prima che feof(fpin) segnali l'EOF (che è appunto -1)...
Usa una variabile di appoggio:
Codice: Seleziona tutto
int c;
while( (c=fgetc(fpin))!=EOF ){
printf("%x\t",fputc(c,fpout));
}
Re: [C] Problema Copia file Byte a Byte
Inviato: giovedì 23 settembre 2010, 23:47
da Feazzu
perfetto..ora funziona...
ora però devo applicarlo a un algoritmo di decompressione che devo fare per un progetto..
Codice: Seleziona tutto
void decomprimi(FILE *fpin){
FILE *fpout;
if((fpout = fopen("decompresso.txt","wb")) == NULL)
fputs("Errore creazione file decompresso",stderr);
int i;
unsigned char a,b,c,d;
while((a=getc(fpin))!=EOF){
if(a == 0xFF){
b = getc(fpin);
if (b == 0xFF){
fputc(b,fpout);
continue;
}
if (b == '0'){
c = fgetc(fpin);
d = fgetc(fpin);
for (i = 0;i < c;i++)
fputc(d,fpout);
continue;
}
c = fgetc(fpin);
for (i = 0;i < b;i++)
fputc(c,fpout);
continue;
}
fputc(a,fpout);
}
fclose(fpout);
}
solo che fatto così mi va in loop..
Re: [C] Problema Copia file Byte a Byte
Inviato: giovedì 23 settembre 2010, 23:48
da Zoff
non manca una f in getc()?
Re: [C] Problema Copia file Byte a Byte
Inviato: giovedì 23 settembre 2010, 23:52
da Feazzu
si si..c'erano..le ho canellato modificando qualcosa sicuramente..

cmq alla fine quando riscrive il file, mi da il problema che mi dava quel file della copia..ossia mette a fine file un ff..
come posso risolverlo?!
Re: [C] Problema Copia file Byte a Byte
Inviato: venerdì 24 settembre 2010, 1:08
da Feazzu
ho capito l'errore...ossia se trova un ff si blocca anche se non è EOF...
allora..spiego un pò che devo fare..
devo fare un programma che comprima un file seguendo un certo algoritmo datomi:
in pratica se un file è composto da i seguenti byte: 1 1 1 1
io lo traformo in FF 4 1..
però quando vado a decomprimere il file, se trova il primo ff si blocca il while...mentre, per come era prima, mi stampava un FF finale prima dell EOF..
quindi come posso ovviare a tale problema?!??
Re: [C] Problema Copia file Byte a Byte
Inviato: venerdì 24 settembre 2010, 1:22
da Zoff
Prova così:
Codice: Seleziona tutto
int c=fgetc(fpin);
while(!feof(fpin)){
printf("%x\t",fputc(c,fpout));
c=fgetc(fpin);
}
Re: [C] Problema Copia file Byte a Byte
Inviato: venerdì 24 settembre 2010, 12:43
da difesaparcosempione
Feazzu ha scritto:
ho capito l'errore...ossia se trova un ff si blocca anche se non è EOF...
allora..spiego un pò che devo fare..
devo fare un programma che comprima un file seguendo un certo algoritmo datomi:
in pratica se un file è composto da i seguenti byte: 1 1 1 1
io lo traformo in FF 4 1..
però quando vado a decomprimere il file, se trova il primo ff si blocca il while...mentre, per come era prima, mi stampava un FF finale prima dell EOF..
quindi come posso ovviare a tale problema?!??
quindi devi permettere al tuo algoritmo di leggere FF
quando tu zippi con FF dovrai mettere un carattere che indichi FF comando. Supponiamo il carattere FE, ma devi ricordarti che se incontri FF FE dovrai dire che FE è un comando e poi anche dato
quindi FF FE
FE FF FE FE
hai reso cosi trasparente FF e FE
ciao
Re: [C] Problema Copia file Byte a Byte
Inviato: venerdì 24 settembre 2010, 14:56
da Feazzu
ok ragazzi..ho risolto..grazie mille..
cmq il problema era abbastanza semplice da risolvere...
ho trasformato il while in questo modo:
Codice: Seleziona tutto
[...]
while(!feof(fpin))
{
a = fgetc(fpin);
if (feof(fpin))
break;
[...]
}
così si ferma subito appena la fgetc ritorna -1...
grazie mille ancora...
metto risolto...