PDA

Visualizza la versione completa : [C++] File binari


xrwnis
06-05-2008, 17:57
Ciao! Sto cercando di imparare a far funzionare i file binari... Ho qualche problema con la lettura da file... questo non è un vero programma, solo una prova, ma comunque non funziona...Dovrebbe uscire sul video quello che c'è scritto in miofile??



#include<iostream>
#include<fstream>

using namespace std;

main()
{
char prova[100];
ifstream file;

file.open("miofile",ios::in|ios::binary);

file.read((char*) &prova,100); //cosa vuol dire questo (char*)??
file.close();
system("pause");
}


Grazie a tutti :ciauz: :ciauz:

shodan
06-05-2008, 18:20
A prima vista esce un crash. :)


file.read((char*) &prova,100); //cosa vuol dire questo (char*)??

La riga dev'essere:


file.read(prova,100);

perché prova è già un array di caratteri.

Il cast a char* si rende necessario quando il parametro non è di tipo char*. Ad esempio una struttura.



struct alpha {
...
...
};

alpha aph;

file.read((char*)&aph,sizeof(alpha));

XWolverineX
06-05-2008, 20:49
Sarebbe stato ammesso un



(char*)&prova[0]

MItaly
06-05-2008, 21:24
Sì, anche se sarebbe stata una scrittura inutilmente fuorviante.

xrwnis
07-05-2008, 17:54
...scusatemi per la mia infinita ignoranza...ma questa sottospecie di programma non funziona...


#include<iostream>
#include<fstream>

using namespace std;

main()
{
char prova[100];
ifstream file;

file.open("miofile",ios::in|ios::binary);

file.read(prova,100);
file.close();

for(int i=0;i<100;i++)
cout<<prova[i];


system("pause");
}


per caso nel file da cui vado a leggere ci deve essere qualcosa in particolare??

shodan
07-05-2008, 18:11
file.open("miofile",ios::in|ios::binary);




Devi assicurarti che "miofile" esista intanto (dovrebbe essere nella stessa directory dell'eseguibile).
Fa attenzione che non viene aggiunta nessuna estensione al file, quindi fstream si aspetta proprio "miofile".

Specificando un percorso:





file.open("C:/miofile.dat",ios::in|ios::binary);

oppure

file.open("C:\\miofile.dat",ios::in|ios::binary);



cerca in C: un file di nome "miofile.dat"

xrwnis
07-05-2008, 18:54
grazie mille... ora ho capito... :mame: :mame:

xrwnis
09-05-2008, 17:26
dovrei prendere delle informazioni da un file binario, metterle nella struct e poi stamparle a video... con questo programma quando stampo nome mi stampa nome,cognome e anni, quando stampo cognome mi stampa cognome e anni...credo proprio di non aver ben capito il funzionamento, cioè con i file di testo normali si fermava a fine riga, qui il fine riga non esiste, quindi come dovrebbe fare a mettere la prima parola nel campo nome, la seconda in cognome e l'intero in anni???? :confused: :confused: :confused:



#include<iostream>
#include<fstream>
using namespace std;



struct Tpersona{
char nome[10];
char cognome[10];
int anni;
};

main()
{
Tpersona pers1;
int lunghezza=sizeof(Tpersona);

ifstream file;
file.open("persone",ios::in|ios::binary);
file.read((char*) &pers1,lunghezza);
file.close();

cout<<pers1.nome<<endl;
cout<<pers1.cognome<<endl;
cout<<pers1.anni;
system("pause");

}

Grazie...

XWolverineX
09-05-2008, 17:31
Potrebbe essere un problema di scrittura
Come scrivi la struttura nel file?

xrwnis
09-05-2008, 17:40
scrivo nome e vado a capo, cognome e vado a capo... ho provato anche mettendo solo degli spazi ma è lo stesso... devo strutturarlo in qualche altro modo?

Loading