2017-05-31 41 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的想法? (如果缺失,以可靠的方式重新创建文件) –

相关问题