Sto cercando di imparare l'accesso dinamico ai file. Il mio codice è il seguente:
int main()
{
dtbrec xrec; // class object
fstream flh;
// Doesn"t create a new file unless ios::trunc is also given.
flh.open("database.txt", ios::in | ios::out | ios::binary);
flh.seekp(0,ios::end);
xrec.getdata();
flh.write((char*)&xrec, sizeof(dtbrec));
flh.close();
}
Pensavo che fstream
per impostazione predefinita crea un nuovo file "database.txt" se non esiste. Qualche idea su cosa potrebbe essere sbagliato?
risposte:
9 per risposta № 1Alcuni suggerimenti su fstream:
un. Se si utilizza una barra rovesciata per specificare la directory come quando si utilizza fstream f;
f.open ("folderfile", ios :: out);
non funzionerà, una barra rovesciata deve essere preceduta da una barra rovesciata, quindi il modo corretto sarebbe:
f.open ("cartella \ file", ios :: out);
b. Se vuoi creare un nuovo file, questo non funzionerà:
f.open ("file.txt", ios :: in | ios :: out | ios :: binary);
il modo corretto sarebbe quello di creare prima il file, usando ios :: out o ios :: trunc
f.open ("file.txt". ios :: out) o f.open ("file.txt", ios :: trunc);
e poi
f.open ("file.txt", ios :: in | ios :: out | ios :: binary);
c. Infine, potrebbe essere in questo ordine come specificato in questa risposta, fstream non crea file
Fondamentalmente iOS :: in richiede di avere già un file esistente.
1 per risposta № 2
Prova a usare ofstream
, crea automaticamente un file, se non esiste già. Oppure, se si desidera eseguire sia l'input che l'output sullo stream, provare a utilizzare fstream
, ma non è necessario specificare ios::in|ios::out|ios::binary
, perché fstream
lo imposta automaticamente per te.