PDA

Visualizza la versione completa : c aiuto per inesperto fwrite fread


filippom22
04-01-2009, 04:17
ho iniziato oggi a leggere qualcosa sul c ed è il mio primo approccio alla programmazzione quindi premetto che sono completamente ignorante in questo campo

dopo migliardi di errori sono riuscito a compilare questo codice (tra laltro copiato quasi completamente da internet) con gcc
dovrebbe leggermi un file nella stessa cartella del' eseguibile e crearmene una copia in codice binario (molto probabilmente ho sbagliato tutto) solo che quando lancio l'eseguibile con./ mi dice bus error e mi crea un kfileuscita vuoto.
Qualcuno mi puo aiutare? Vi ringrazio in anticipo per le risposte.


#include <stdio.h>

#define kfileingresso "input.txt"
#define kfileuscita "output.dat"



int main (void)

{


int ca[6];

FILE *fp_in;

FILE *fp_out;

int i;



fp_in = fopen ("kfileingresso", "rb");



fp_out = fopen ("kfileuscita", "wb");



while (1)

{

i = fread (ca, 2000, 6, fp_in);


if (i == 0)

{
printf("bo");

break;
}



fwrite (ca, 1000, 6, fp_out);



}



fclose (fp_in);

fclose (fp_out);



return 0;

}

MItaly
04-01-2009, 13:26
Così ad occhio direi che ci sono diverse cose da aggiustare...


#include <stdio.h>

#define kfileingresso "input.txt"
#define kfileuscita "output.dat"

int main (void)
{
unsigned char buffer[1024];
FILE *fp_in;
FILE *fp_out;
int readBytes=-1;
int exitCode=0;
fp_in = fopen ("kfileingresso", "rb");
if(fp_in==NULL)
{
fprintf(stderr,"Impossibile aprire il file d'ingresso.\n");
return 1;
}
fp_out = fopen ("kfileuscita", "wb");
if(fp_out==NULL)
{
fprintf(stderr,"Impossibile aprire il file d'uscita.\n");
return 2;
}
for(;;)
{
readBytes = fread (buffer, 1, sizeof(buffer), fp_in);
if(readBytes == 0)
{
puts("Copia terminata.");
break;
}
fwrite(buffer, 1, readBytes, fp_out);
if(ferror(fp_out))
{
fprintf(stderr,"Errore di scrittura.\n");
exitCode=3;
break;
}
}
fclose (fp_in);
fclose (fp_out);
return exitCode;
}



dovrebbe leggermi un file nella stessa cartella del' eseguibile e crearmene una copia in codice binario
Mah, non so cosa tu intenda dire per "copia in codice binario", di fatto il programma te ne crea una copia esatta.

ho iniziato oggi a leggere qualcosa sul c ed è il mio primo approccio alla programmazzione quindi premetto che sono completamente ignorante in questo campo

dopo migliardi di errori sono riuscito a compilare questo codice (tra laltro copiato quasi completamente da internet) con gcc
Sappi che questo è il peggior metodo possibile per imparare un linguaggio di programmazione. Comprati un libro di C.

filippom22
04-01-2009, 17:37
grazie mille per la risposta
sicuramente mi comprero un libro sul c mi ero letto qualcosa su internet tanto per capire di cosa si parlava
con restituirmi una copia in codice binario intendevo che mi creasse un file di testo dove vedevo ogni singolo bit del file che aprivo cmq per ora ci rinuncio e mi leggo prima un bella guida, ne aprofitto per domandarti se ai qualche titolo da cosigliarmi
ho provato con il codice corretto da te e mi dice: impussibile aprire il file d'ingresso
per quanto rigurda il link che ai postato nn capisco perchè ma nn lo apre

MItaly
04-01-2009, 20:27
Originariamente inviato da filippom22
con restituirmi una copia in codice binario intendevo che mi creasse un file di testo dove vedevo ogni singolo bit del file che aprivo
Allora devi convertire ogni carattere in una sequenza di 1 e di 0.


cmq per ora ci rinuncio e mi leggo prima un bella guida, ne aprofitto per domandarti se ai qualche titolo da cosigliarmi
Non saprei, ho sempre studiato C++ e mai C; in ogni caso se cerchi nel forum ci sono diversi consigli utili a proposito.


ho provato con il codice corretto da te e mi dice: impussibile aprire il file d'ingresso

Sei sicuro che il file in questione esiste?


per quanto rigurda il link che ai postato nn capisco perchè ma nn lo apre
Non l'ho postato direttamente, è la mia "firma" che viene aggiunta in fondo ad ogni post. È uno stupido scherzo per quelli che non hanno una guida cartacea; se clicchi effettui il logout dal forum. :stordita:

filippom22
04-01-2009, 20:55
HAHAHA e io che continuavo imperterrito a cliccarci
grazie ancora per l'aiuto
cmq si il file esiste ed è nella stessa cartella dell eseguibile

MItaly
04-01-2009, 23:56
Trovato il problema: nelle fopen hai messo delle virgolette di troppo; non deve essere così


fp_in = fopen ("kfileingresso", "rb");

ma così


fp_in = fopen (kfileingresso, "rb");
, visto che le virgolette le hai già specificate nei #define all'inizio. In ogni caso ti consiglio di usare come nomi di macro solo nomi tutti maiuscoli come da convenzione universalmente diffusa, in modo da poterle riconoscere al volo. Quindi il tuo programma diventa così:


#include <stdio.h>

#define KFILEINGRESSO "input.txt"
#define KFILEUSCITA "output.dat"

int main (void)
{
unsigned char buffer[1024];
FILE *fp_in;
FILE *fp_out;
int readBytes=-1;
int exitCode=0;
fp_in = fopen (KFILEINGRESSO, "rb");
if(fp_in==NULL)
{
fprintf(stderr,"Impossibile aprire il file d'ingresso.\n");
return 1;
}
fp_out = fopen (KFILEUSCITA, "wb");
if(fp_out==NULL)
{
fprintf(stderr,"Impossibile aprire il file d'uscita.\n");
return 2;
}
for(;;)
{
readBytes = fread (buffer, 1, sizeof(buffer), fp_in);
if(readBytes == 0)
{
puts("Copia terminata.");
break;
}
fwrite(buffer, 1, readBytes, fp_out);
if(ferror(fp_out))
{
fprintf(stderr,"Errore di scrittura.\n");
exitCode=3;
break;
}
}
fclose (fp_in);
fclose (fp_out);
return exitCode;
}
.
:ciauz:

filippom22
05-01-2009, 15:24
grazie mille ora ti confermo che funziona perfettamente.
ciao filippo

Loading