2011-02-18 21 views
6

, hiçbir dosya hiç oluşturulur:Neden akış neden bir floş gerektiriyor? Aşağıdaki kodu çalıştırırsanız

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

Ancak, önce yakın() floş eklerseniz, çalışır:

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

standart kütüphane mu Aslında bunu gerektirir mi, yoksa Visual C++ CRT'deki bir hata mı?

+3

Hangi sürümleri Visual Studio? – GManNickG

+0

Ve hangi işletim sistemi? –

cevap

8

Bu bir hatadır. §27.8.1.10/4, kısaltılmış Okuma:

void close();
Etkileri: rdbuf()->close() ...

rdbuf()->close() ne yapar Aramalar? §27.8.1.3/6, kısaltılmış, vurgu madeni göre:

basic_filebuf<charT,traits>* close();
is_open() == false durumunda, boş bir gösterici ile döner. Bir yerleştirme alanı varsa, karakterleri yıkamak için overflow(EOF) numaralı telefonu arayın. ...

Bu, temizlemesi varsayalım. (Nitekim flush() çağrısı sonuçta aynı şeyi yapar.)


Not close() çağrısı kendisi gerekli değildir, basic_ofstream yıkıcı close() arayacak olarak.

0

Programdan çıkmadan önce dosyayı kontrol ediyor musunuz? OS tüm IO'ları arabelleğe alacaktır, bu yüzden çıkmadan önce dosyada herhangi bir veri (floş olmadıkça) göremeyebilir.

İlgili konular