Newsgroup: it.comp.lang.c
Titolo: Copia di un file gif

Salve a tutti,
vorrei copiare un file gif...
ma non ci riesco :(
FILE *fp,*fp2;
int iTmp;
   if((fp=fopen("logo.gif","r"))== NULL)
      return -1;
   if((fp2=fopen("prova.gif","w"))== NULL)
      return -1;
   while ((iTmp = getc (fp)) != EOF )
      putc (iTmp, fp2);
   fclose(fp);
   fclose(fp2);
Quando confronto le lunghezze il file origine "logo.gif" č di 962
mentre "prova.gif" č di 964.
Se lo faccio con i file di testo va tutto bene...
non capisco il perchč..!!!
Mi sapreste dire dove sbaglio??
Grazie
xoooox
--------------------------------
Inviato via 
http://usenet.libero.it

 ma non ci riesco :(
[cut]
Io l'ho provato su linux e funziona, cioe' le lunghezze dei due file 
sorgente e destinazione sono uguali.
Per fare cose di questo tipo (copie "binarie" di file), ti consiglio di 
usare l'accoppiata fread/fwrite con un buffer per es. di 512 bytes.
Ah, inoltre ricordati che cosi' come l'hai scritto, se la prima fopen ha 
successo ma la seconda fallisce, l'handle del primo file non lo chiudi !!!

 Mi sapreste dire dove sbaglio??
Va aperto come binario:
 if((fp=fopen("logo.gif","rb"))== NULL)
Ciao,
Ema

 Io l'ho provato su linux e funziona
Mi sono dimenticato che su linux lo specificatore 'b' e' inutile e non 
serve, ma su altri O.S. potrebbe essere necessario mettere il 'b', 
quindi nelle fopen "rb" e "wb". ;)

 ha scritto nel messaggio
news:3F5CBC00...@supereva.it...

qua' stai dicendo il falso ... lo specificatore b ci vuole cmq per file
binari ... anche se hai culo che linux non sputtana i caratteri speciali di
testo non vuole dire che vada bene ...
ciao

 testo non vuole dire che vada bene ...
Riguardo a linux e la fopen, per essere precisi (vedere 'man fopen'):
"Su tutti i sistemi POSIX (linux compreso), lo specificatore 'b' puo' 
essere inserito nella stringa del modo di apertura. Questo per 
compatibilita' con lo standard ANSI C3.159-1989 ("ANSI C") e per la 
portabilita' su altri O.S.
Tuttavia, sui sistemi POSIX, lo specificatore 'b' e' del tutto *ignorato*."
P.S. Prima di dare del falso agli altri, leggi i man.
Non e' che con linux si ha culo perche *non* sputtana i caratteri 
speciali, ma e' che su linux file di testo e file binari vengono 
trattati allo *stesso* modo.

 testo non vuole dire che vada bene ...
Non si tratta di culo. Su Linux e tutti gli Unix non viene fatta nessuna
traslazione in lettura e scrittura dei caratteri \n\r, cosa che invece
viene fatta su altri S.O.
Su Linux lo specificatore "b" e' inutile, ma non metterlo rischia di
rendere "non portabili" i programmi.
C:\>iao Angelo
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ha scritto nel messaggio
news:3F5DAE6D...@supereva.it...

si perche' su linux usa solo il binario ... (e non si ha pproblemi con la
conversione del carattere speciale \n ecc ...) il punto e' che cmq ci va
messo ... lo standard lo dice e lo standard non ti dice su che macchina sei
... quindi ...
ciao

 ha scritto nel messaggio
news:43721ec4623922c4dff...@mygate.mailgate.org...

non solo non portabili ma anche non standard ... qua' programmiamo in c
standard o facciamo lo spaghetti dev ???
ciao

 standard o facciamo lo spaghetti dev ???
Puoi anche citarmi la pagina dove lo standard afferma una cosa del
genere...
C:\>iao


 genere...
ho sotto mano solo il pdf delle ref dello standard C++ ... guardo su quello
se c'e' il riferimento anche per la controparte C ma ci spero poco ... :-/
ciao


ok scusa nel reference standard non c'e' scritto nulla ... c'e' solo scritto
i modi che si possono usare e non il motivo per il quale usarli ... quindi
penso che lo dicano tutti gli scrittori di libri che mirano a cercare una
buona portabilita' ?
ciao

  if((fp=fopen("logo.gif","rb"))== NULL)
	Non vorrei insisterci, ma credo che con il C99 decada, per
	cosě dire, la differenza tra file binario e di testo; in una parola,
	non dovrebbe essere piů usato `t' o `b', il C non dovrebbe
	fare distinzione tra i due. 
 
	P.
-- 
                                           _         ______ |                  
  \    The Hacking Pages        \        /   \___-=O`/|O`/__|                  
   \   	     ---                 \_______\          / | /    )                 
   /     
www.lulli.net
           /        `/-==__ _/__|/__=-|               
  /                             /         *             \ | |                  
                                                        (o)                    

 fare distinzione tra i due. 
"t" non esiste. La differenza tra file di testo e binari rimane anche in 
C99: leggi bene la descrizione della libreria standard.
-- 
Enrico 'Trippo' Porreca