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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top