PDA

Visualizza la versione completa : [C++]Problema con i file binari


Squall1988
17-05-2005, 15:51
Ho scritto questo codice


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

struct studente {
char nome[50];
int voto;
};

int main(int argc, char *argv[])
{
char filename[] = "studenti.dat";
studente stud;

fstream fs;

// Fase 1. Dati precedenti
fs.open (filename,ios::binary | ios::in);
if (!fs || fs.eof())
{
// Non sono ancora presenti record
cout << "Nessun dato già presente\n";
}
else
{
// Stampiamo i record già presenti
while (fs.read((char*)&stud,sizeof stud))
cout << stud.nome << "\t" << stud.voto << endl;
}
fs.close();

system ("pause");

// Fase 2. Inserimento nuovi dati
fs.open (filename,ios::app | ios::binary);

if (!fs)
cout << "Errore nell'apertura del file";

int n;
cout << "Studenti da aggiungere: ";
cin >> n;

for (int i = 0; i < n; i++)
{
cout << "STUDENTE " << i+1 << endl;
cout << "Nome: ";
cin >> stud.nome;
cout << "Voto: ";
cin >> stud.voto;
fs.write((char*)&stud, sizeof stud);
}

fs.close();

system ("pause");
return 0;
}

ma ha un problema. Quando apre il file la seconda volta e verifica il successo dell'operazione

// Fase 2. Inserimento nuovi dati
fs.open (filename,ios::app | ios::binary);

if (!fs)
cout << "Errore nell'apertura del file";

stampa sempre il messaggio di errore, ed in effetti non scrive nulla sul file. Quale può essere il problema??

kentaromiura
17-05-2005, 16:43
Originariamente inviato da Squall1988
Ho scritto questo codice


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

struct studente {
char nome[50];
int voto;
};

int main(int argc, char *argv[])
{
char filename[] = "studenti.dat";
studente stud;

fstream fs;

// Fase 1. Dati precedenti
fs.open (filename,ios::binary | ios::in);
if (!fs || fs.eof())
{
// Non sono ancora presenti record
cout << "Nessun dato già presente\n";
}
else
{
// Stampiamo i record già presenti
while (fs.read((char*)&stud,sizeof stud))
cout << stud.nome << "\t" << stud.voto << endl;
}
fs.close();

system ("pause");

// Fase 2. Inserimento nuovi dati
fs.open (filename,ios::app | ios::binary);

if (!fs)
cout << "Errore nell'apertura del file";

int n;
cout << "Studenti da aggiungere: ";
cin >> n;

for (int i = 0; i < n; i++)
{
cout << "STUDENTE " << i+1 << endl;
cout << "Nome: ";
cin >> stud.nome;
cout << "Voto: ";
cin >> stud.voto;
fs.write((char*)&stud, sizeof stud);
}

fs.close();

system ("pause");
return 0;
}

ma ha un problema. Quando apre il file la seconda volta e verifica il successo dell'operazione

// Fase 2. Inserimento nuovi dati
fs.open (filename,ios::app | ios::binary);

if (!fs)
cout << "Errore nell'apertura del file";

stampa sempre il messaggio di errore, ed in effetti non scrive nulla sul file. Quale può essere il problema??
prova cosi':


..
fs.open (filename,ios::app | ios::binary);

if (!fs)
fs.open (filename,ios::out | ios::binary);

if (!fs)
cout << "Errore nell'apertura del file";
..

Squall1988
17-05-2005, 16:58
niente da fare

Squall1988
17-05-2005, 17:05
ho notato ke se uso una nuova variabile di tipo ofstream va, ma la cosa non mi garba molto...

Loading