如果我删除 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
将释放资源)。
#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
将释放资源)。