2011-02-18 10 views
6

Si funciono el siguiente código, ningún archivo se crea en absoluto:¿Por qué ofstream requiere una descarga?

std::ofstream outputFile(strOutputLocation.c_str(), std::ios::binary); 
outputFile.write((const char*)lpResLock, dwSizeRes); 
outputFile.close(); 

Sin embargo, si añado un flush() antes del cierre, funciona:

std::ofstream outputFile(strOutputLocation.c_str(), std::ios::binary); 
outputFile.write((const char*)lpResLock, dwSizeRes); 
outputFile.flush(); 
outputFile.close(); 

¿La biblioteca estándar en realidad lo requieren, o es un error en el CRT de Visual C++?

+3

¿Qué versión de Visual Studio? – GManNickG

+0

¿Y qué sistema operativo? –

Respuesta

8

Es un error. La lectura §27.8.1.10/4, abreviada:

void close();
Efectos: Las llamadas rdbuf()->close() ...

¿Qué rdbuf()->close() hacer? De acuerdo con §27.8.1.3/6, la mía abreviada, el énfasis:

basic_filebuf<charT,traits>* close();
Si is_open() == false, devuelve un puntero nulo. Si existe un área de venta, llama al overflow(EOF) para vaciar los caracteres. ...

Es decir, se supone que debe enjuagarse. (De hecho, la llamada a flush() en última instancia, hace lo mismo.)


Nota no es necesaria la llamada a close() sí mismo, como el destructor de basic_ofstream llamará close().

0

¿Está revisando el archivo antes de salir del programa? OS almacenará en búfer todo el IO, por lo tanto, es posible que no vea ningún dato (a menos que descargue) en el archivo antes de salir.

Cuestiones relacionadas