[Risolto][C] Problema Copia file Byte a Byte

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Feazzu
Prode Principiante
Messaggi: 20
Iscrizione: lunedì 5 febbraio 2007, 2:29

[Risolto][C] Problema Copia file Byte a Byte

Messaggio 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...
Ultima modifica di Feazzu il venerdì 24 settembre 2010, 14:58, modificato 1 volta in totale.
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: [C] Problema Copia file Byte a Byte

Messaggio 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));
}
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Feazzu
Prode Principiante
Messaggi: 20
Iscrizione: lunedì 5 febbraio 2007, 2:29

Re: [C] Problema Copia file Byte a Byte

Messaggio 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..
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: [C] Problema Copia file Byte a Byte

Messaggio da Zoff »

non manca una f in getc()?
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Feazzu
Prode Principiante
Messaggi: 20
Iscrizione: lunedì 5 febbraio 2007, 2:29

Re: [C] Problema Copia file Byte a Byte

Messaggio da Feazzu »

si si..c'erano..le ho canellato modificando qualcosa sicuramente.. ;D
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?!
Feazzu
Prode Principiante
Messaggi: 20
Iscrizione: lunedì 5 febbraio 2007, 2:29

Re: [C] Problema Copia file Byte a Byte

Messaggio 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?!??
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: [C] Problema Copia file Byte a Byte

Messaggio da Zoff »

Prova così:

Codice: Seleziona tutto

int c=fgetc(fpin);
while(!feof(fpin)){
    printf("%x\t",fputc(c,fpout));
    c=fgetc(fpin);
}
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Avatar utente
difesaparcosempione
Rampante Reduce
Rampante Reduce
Messaggi: 6031
Iscrizione: giovedì 27 luglio 2006, 19:06
Località: Torino
Contatti:

Re: [C] Problema Copia file Byte a Byte

Messaggio 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
Feazzu
Prode Principiante
Messaggi: 20
Iscrizione: lunedì 5 febbraio 2007, 2:29

Re: [C] Problema Copia file Byte a Byte

Messaggio 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...
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 2 ospiti