Domanda
Ho il seguente codice, in esecuzione su Suse 10.1 / G ++ 4.1.0, e non scrive al file:
#include <fstream>
#include <iostream>
int main(){
std::ofstream file("file.out");
file << "Hello world";
}
Il file è correttamente creato e aperto, ma è vuota. Se cambio il codice a:
#include <fstream>
#include <iostream>
int main(){
std::ofstream file("file.out");
file << "Hello world\n";
}
(aggiungere un \n
al testo), funziona.
Ho provato anche il lavaggio del ofstream, ma non ha funzionato.
Qualche suggerimento?
Soluzione
Se si controlla il file facendo un cat
, può essere la shell che viene erroneamente configurato e non stampa la linea se non c'è fine della riga.
std::endl
aggiunge un \n
e a filo.
Altri suggerimenti
Il distruttore dovrebbe svuotare e chiudere il file.
Sono abbastanza sicuro, l'errore è un altro luogo, o
1) non controlli al punto giusto in tempo. A quel punto fai a confrontare il contenuto del file, "dopo" le uscite, o si imposta un punto di interruzione prima che il programma viene chiuso e quindi di controllare il contenuto dei file?
2) In qualche modo il programma si blocca prima di uscire?
Non so se questo è ciò che si è tentato, ma si dovrebbe fare:
file << "Hello World" << std::flush;
Aggiorna ; sto lasciando questa risposta qui a causa dei commenti utili
Sulla base del feedback, io modificare il mio consiglio:. Non si dovrebbe avere a std::flush
esplicitamente chiamata (o file.close()
è per questo), perché il distruttore lo fa per te
Inoltre, chiamando a filo obbliga esplicitamente un'operazione di I / O che potrebbe non essere il modo più ottimizzato. Riservando alla iostreams sottostanti e sistema operativo sarebbe meglio.
Ovviamente problema del PO non era correlato a chiamare o non chiamare std::flush
, ed era probabilmente dovuto al tentativo di leggere il file prima che il distruttore flusso di file è stato chiamato.
non
file << "Hello world" << std::endl;
lavoro?
endl inserti una nuova riga e vampate buffer. E 'questo che si stia riferendo a quando hai detto che avresti già provato vampate di calore?
Si sta lavorando su Linux, che è un sistema POSIX-compliant. Il POSIX definisce standard di ciò che un Linea :
Una sequenza di zero o più caratteri non più un newline terminazione carattere di nuova riga.
Quindi, senza il carattere di nuova riga, il file contiene 0 linee ed è quindi vuota.