Tenendo sempre presente che l'utente finale sono io stesso, direi che allora posso affrontare il problema in questo modo:
All'apertura del file, verifico che sia stato effettivamente aperto, con istruzioni simili a queste:
Per la scrittura quindi potrei farecodice:std::fstream fs;//faro' ifstream o ofstream in base alle necessita' fs.open ("test.txt");//ci posso aggiungere la modalita' di apertura if (fs.is_open()) { //quello che devo fare fs.close(); } else { std::cout << "Error opening file"; }
Per la lettura, una cosa simile,codice:fs.write(/*scrittura 1*/); fs.write(/*scrittura 2*/); //elenco di tutto quello che devo scrivere if(fs.good()) { std::cout<<"Scrittura avvenuta con successo"; } else { std::cout<<"Lettura fallita"; }
Cosi' facendo sono nella condizione di sapere almeno se tutto e' andato bene o no.codice:fs.read(/*lettura1*/); fs.read(/*lettura2*/); fs.read(/*letturan*/); if(fs.good()) { std::cout<<"Lettura avvenuta con successo"; } else { std::cout<<"Lettura fallita"; //decido se ripristinare i valori di default nel caso di un oggetto, ripristinare i valori precedenti o non so che altro, in base al caso specifico }
In questo modo comunque non dovrei avere blocchi durante l'esecuzione, approfondiro' poi con maggior calma tutto il resto.
Ultima cosa: quanto scritto in precedenza, come mia interpretazione, e' corretto?
Mi autoquoto:
Credo allora di aver interpretato male la seguente frase, che viene
riportata identica sia per il metodo write che per il metodo read:
"Basic guarantee: if an exception is thrown, the object is in a valid state.
It throws an exception of member type failure if the resulting error state flag is not goodbit and member exceptions was set to throw for that state.
Any exception thrown by an internal operation is caught and handled by the function, setting badbit. If badbit was set on the last call to exceptions, the function rethrows the caught exception."
Io l'avevo interpretata come "se qualcosa va male, l'oggetto stream resta sempre in uno stato valido, nel senso che posso comunque sapere cosa e' successo mediante i flag interni, da interrogare mediante gli appositi metodi." (non e' una traduzione letterale, ma quanto ho interpretato io).

Rispondi quotando
