2017-05-31 72 views
2

我有以下代碼打開一個流並寫入它,然後刪除它,再次試圖寫它。 有沒有辦法讓fstream的對象得到通知不存在的文件,並重新創建文件(我知道我可以使用stat來檢查,但我不知道是否有在流對象本身的狀態變化)底層文件未鏈接時,fstream對象會發生什麼變化?

#include <iostream>  // std::cout 
#include <fstream>  // std::fstream 
#include <unistd.h> 
#include <sys/stat.h> 
int main() { 
std::fstream fs; 
fs.open ("test.txt",std::fstream::out); 
if (fs.is_open()) 
{ 
    fs << "lorem ipsum"; 
    std::cout << "Operation successfully performed\n"; 
    std::cout<<fs.fail()<<std::endl; 
    unlink("test.txt"); 
    fs << "more lorem ipsum"; 
    fs.write("hi",2); 
    fs.write("hi",2); 
    fs.write("hi",2); 
    fs.write("hi",2); 
    fs.write("hi",2); 
    std::cout<<fs.fail()<<std::endl; 
    fs.close(); 
} 
    else 
    { 
     std::cout << "Error opening file"; 
    } 
    return 0; 
} 

我已嘗試

is_open() 
good() 

回答

3

沒有。 I/O繼續到未鏈接的文件,當所有打開的FD都關閉時,該文件將消失。

+0

這實際上是在Unix系統上發生的一件可悲的事 –

+2

@PaulStelian這實際上是'名字沒有文件:文件有名字'[Dennis Ritchie,或者可能是Ken Thompson,* c。* 1974]的結果。 – EJP

+0

有很好的報價!這就是說,*是*有辦法做OP的想法? (如果缺失,以可靠的方式重新創建文件) –

相關問題