如果我删除 C++ 程序正在向其写入数据的文件,会发生什么情况?

what happens if I delete the file onto which a c++ program is writing data to?

#include<iostream>
#include<string>
#include<fstream>
#include<unistd.h>
using namespace std;

int main(){
    fstream f;
    f.open("test.txt" , ios::app);
    string s="Hello";
    if(f.is_open()){
        cout << "File Open"<<endl;
        f << s;
        sleep(15);
        if(f.is_open()){
            cout << "Still Open" << endl;
        }else{
            cout << "Not Open" << endl;
        }
        s= "Hey \n";
        f<< s;
    }else{
        cout << "Not open" << endl;
    }
    f.close();
    }
}

此代码将在正常执行时将内容写入 test.txt 文件。 但是如果我在程序运行的时候删除文件,然后我发现程序没有抛出异常并且成功退出。但是我删除后没有找到文件text.txt

我应该怎么做才能知道写入文件是否成功?

在 Linux 下文件继续存在,直到程序关闭 fstream,但这并不意味着您可以通过 ls。当 fstream 关闭时文件被真正删除

这取决于您使用的操作系统。

在 Windows 上,OS 将首先阻止您删除此类文件。

在 Linux,OS 将允许您删除此类文件,但会保留此文件的句柄,直到它被使用它的进程释放(在这种情况下,当 fstream 将释放资源)。