2010-01-16 16 views
14

Bir metin dosyasından veri okumaya çalışıyorum, temizleyin ve ardından o sırayla fstream sınıfını kullanarak yazdım.Dosyadan oku, temizle, ona yaz

Sorum, bir dosyadan okuduktan sonra nasıl temizlendiğidir. Bir dosyayı açabileceğimi ve aynı zamanda temizleyebileceğimi biliyorum, ancak içeriğini temizlemek için akıntıya çağıracağım bir fonksiyon var mı?

cevap

15

Açmalısınız, giriş işlemlerinizi gerçekleştirmeli ve ardından kapatıp std :: fstream :: trunc flag setiyle yeniden açmalısınız. Eğer bir kaza veya diğer felaket olayda izlenecek tamamen güvenli olmasını istiyorsanız

#include <fstream> 

int main() 
{ 
    std::fstream f; 
    f.open("file", std::fstream::in); 

    // read data 

    f.close(); 
    f.open("file", std::fstream::out | std::fstream::trunc); 

    // write data 

    f.close(); 

    return 0; 
} 
4

, ikinci bir geçici dosyaya yazma yapmalıdır. Bittiğinde, ilk dosyayı silin ve geçici dosyayı ilk dosyaya yeniden adlandırın. Bunu yaparken yardım için Boost Filesystem kitaplığına bakın.

+0

Bunun gibi, silme ve yeniden adlandırma arasında hala bir boşluk var. UNIX dosya sistemlerinde, fsync'i, silme işlemini atlamanız ve sadece geçici dosyayı ilk dosya üzerinde yeniden adlandırmanız gerekir; atomik olarak değiştirilecek. Windows'ta NTFS'nin özel bir ReplaceFile işlevi vardır; atomik değiştirmeler, diğer dosya sistemlerinde AFAIK yapamaz. – ephemient