Multi Forum Altomesima
Multi Forum Altomesima
Multi Forum Altomesima
Home | Profilo | Discussioni attive | Utenti | Cerca | FAQ
 Tutti i Forum
 Linguaggi di programmazione
 Linguaggio C
 lettura file binari non formattati

Nota: Devi essere registrato per poter rispondere.

Dimensioni video:
Nome Utente:
Password:
Messaggio:

* HTML abilitato
* Codice Forum disabilitato
Faccine
Felice [:)] Davvero Felice [:D] Caldo [8D] Imbarazzato [:I]
Goloso [:P] Diavoletto [):] Occhiolino [;)] Clown [:o)]
Occhio Nero [B)] Palla Otto [8] Infelice [:(] Compiaciuto [8)]
Scioccato [:0] Arrabbiato [:(!] Morto [xx(] Assonnato [|)]
Bacio [:X] Approvazione [^] Disapprovazione [V] Domanda [?]

 
   

C O N T R O L L A    D I S C U S S I O N E
frea Inviato - 07/11/2003 : 19:38:00
Salve! Qualcuno sa come si fa a leggere file binari "non formattati" in linguaggio c?

Con tali istruzioni
....
FILE *fp;
int a;
if ((fp=fopen("prova.bin","rb"))==NULL){
printf("Impossibile aprire il file.\n");
exit(1);
}

fread (&a,sizeof(int),1,fp);
....

legge effettivamente un numero intero, ma il numero letto non ha senso (è o troppo grande o troppo piccolo rispetto a quanto dovrebbe leggere). Secondo me è perchè non riesco a dirgli che il file è non formattato. In fortran c'è l'opzione "unformatted" da inserire all'apertura del file. In c c'è qualcosa di simile?
7   U L T I M E    R I S P O S T E    (in alto le più recenti)
frea Inviato - 14/11/2003 : 18:46:46
Risolto tutto!
Grazie lo stesso...
A presto...
frea Inviato - 13/11/2003 : 18:30:06
Grazie, mi è stato molto utile.

Ora ho il seguente problema (e temo sia molto più stupido del precedente);

il programma qui sotto legge correttamente (in linguaggio c) un file binario scritto da me in fortran

#include
#include

int main (void) { // legge in binario (in linguaggio c)
FILE *fp;
int buco; // il fortran inserisce sempre uno spazio vuoto di 4 byte prima di scrivere!!!!
int i,j,k;

if ((fp=fopen("prova.bin","rb"))==NULL){
printf("Impossibile aprire il file.\n");
exit(1);
}

fread (&buco,sizeof(int),1,fp);
fread (&i,sizeof(int),1,fp);
fread (&j,sizeof(int),1,fp);
fread (&k,sizeof(int),1,fp);
printf(" %d %d %d\n",i,j,k);

fclose (fp);

return 0;
}

Volendolo tradurre in c++ (e non essendo evidentemente pratico) ho scritto:

#include
#include

int main (void) { // dovrebbe leggere in binario (in linguaggio c++) ma non funziona!!!
fstream fin;
int a,b,c;

fin.open("prova.bin", ios::in | ios::binary);
if (!fin) cerr <<"Errore!"<fin.seekg(sizeof(int),ios::beg);
fin >>a>>b>>c;
cout <<" "<fin.close();

return 0;
}

...ma non funziona! Dove è che sbaglio?
mimc Inviato - 13/11/2003 : 02:34:23
Nel link sottostante vi è un programma C che converte una sequenza di interi (su 4 byte) dal formato Little Endian a quello Big Endian e viceversa.

http://www.dsi.unive.it/~arch/LAB/esercit7.html

spero possa servirti.
ciaoo
frea Inviato - 12/11/2003 : 22:33:46
Grazie mille, ora ho il problema che devo passare da big endian a little endian, sai come potrei fare?
mimc Inviato - 08/11/2003 : 15:47:14
Scusa,
nel copia ed incolla, sono scomparse alcune cose tipo
stdio.h, per via delle parentesi angolari.

per cui la prima istruzione del programma è:

#include"stdio.h"
metto fra apici ' ' le parentesi angolari scomparse, naturalmente gli apici non fanno parte del codice.

........................


#include'<'stdio.h'>'

#define N 15
char nome_file[] ="file_int.dat";
int vector[N];

void inserisci_in_array();
void crea_file();
void apri_file();

int main()
{
char car;
inserisci_in_array();
crea_file();
apri_file();
scanf("\n%c",&car);
return 0;
}
void inserisci_in_array()
{
int i;

printf("\ninserite gli %d elementi interi dell'array\n",N);
for(i=0; i'<'N;i++)
{printf("%d) ",i+1);
scanf("%d",&vector[i]);
}
}

void crea_file()
{
FILE *fp;
int i=0;


if((fp=fopen(nome_file,"wb"))!=NULL){
fwrite(vector,sizeof(int),N,fp);
fclose(fp);
}
else
printf("errore nell'apertura in scrittura del file %s ",nome_file);
}

void apri_file()
{
FILE *fp;
int i;
if((fp=fopen(nome_file,"rb"))!=NULL)
{
while(fread(vector,N*sizeof(int),1,fp)==1)
{for(i=0;i'<'N;i++)
printf(" %d) %d ",i+1,vector[i]);
}
fclose(fp);
}
else printf("errore nell'apertura del file %s in lettura",nome_file);
}

frea Inviato - 08/11/2003 : 10:43:57
Grazie della risposta.... ma il tuo programma non funziona...
mimc Inviato - 08/11/2003 : 00:44:23
Ciao,

Questo è un mio esercizio fatto tempo fa, che dovrebbe andare bene:

/*Scrivete un programma in C, che salva su un un file binario N numeri interi acquisiti da input e memorizzati in un array ed apri il file binario per stamparli a video.


Suggerimento utilizzate 3 funzioni di nome: inserisci_in_array; crea_file; apri_file*/


#include

#define N 15
char nome_file[] ="file_int.dat";
int vector[N];

void inserisci_in_array();
void crea_file();
void apri_file();

int main()
{
char car;
inserisci_in_array();
crea_file();
apri_file();
scanf("\n%c",&car);
return 0;
}
void inserisci_in_array()
{
int i;

printf("\ninserite gli %d elementi interi dell'array\n",N);
for(i=0; i {printf("%d) ",i+1);
scanf("%d",&vector[i]);
}
}

void crea_file()
{
FILE *fp;
int i=0;


if((fp=fopen(nome_file,"wb"))!=NULL){
fwrite(vector,sizeof(int),N,fp);
fclose(fp);
}
else
printf("errore nell'apertura in scrittura del file %s ",nome_file);
}

void apri_file()
{
FILE *fp;
int i;
if((fp=fopen(nome_file,"rb"))!=NULL)
{
while(fread(vector,N*sizeof(int),1,fp)==1)
{for(i=0;iprintf(" %d) %d ",i+1,vector[i]);
}
fclose(fp);
}
else printf("errore nell'apertura del file %s in lettura",nome_file);
}


Vai all'inizio della pagina Multi Forum Altomesima - © 2002 -2008 Altomesima Online
Questa pagina e' stata aperta in 0,14 secondi. Superdeejay.net | Snitz Forums 2000