Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 当底层文件被解除链接时,fstream对象会发生什么情况?_C++_Fstream - Fatal编程技术网

C++ 当底层文件被解除链接时,fstream对象会发生什么情况?

C++ 当底层文件被解除链接时,fstream对象会发生什么情况?,c++,fstream,C++,Fstream,我有以下代码打开一个流并写入它,然后删除它,再次尝试写入它。 有没有办法让fstream对象得到不存在文件的通知并重新创建文件(我知道我可以使用stat进行检查,但我想知道流对象本身是否有状态更改) 没什么。I/O将继续连接到未链接的文件,当所有打开的FD都关闭时,该文件将消失。在Unix上,这实际上是一件令人伤心的事情systems@PaulStelian这实际上是“名字没有文件:文件有名字”的结果[Dennis Ritchie,或者可能是Ken Thompson,c.1974]。这句话很好!

我有以下代码打开一个流并写入它,然后删除它,再次尝试写入它。 有没有办法让fstream对象得到不存在文件的通知并重新创建文件(我知道我可以使用stat进行检查,但我想知道流对象本身是否有状态更改)


没什么。I/O将继续连接到未链接的文件,当所有打开的FD都关闭时,该文件将消失。

在Unix上,这实际上是一件令人伤心的事情systems@PaulStelian这实际上是“名字没有文件:文件有名字”的结果[Dennis Ritchie,或者可能是Ken Thompson,c.1974]。这句话很好!也就是说,有没有一种方法可以满足OP的要求?(以可靠的方式重新创建丢失的文件)我想我最终会使用stat/access。不管怎样@EJP你提到的很好。我会查一查那句话。
#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()