我已编写此程序以使用fstream
创建文件,输出应显示文件是否已创建。我在几个在线编译器上运行它,如 Codechef , C ++ shell等。编译器已经成功编译了这个程序,但输出没有相应的,而不是说文件创建的编译器说创建文件时出错。
这可能是由于开发工具吗?
以下是该计划的代码:
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
fstream file;
file.open("a.txt");
if(!file)
{
cout<<"Error in creating file!!!";
}
else
{
cout<<"File created successfully.";
file.close();
}
}
答案 0 :(得分:2)
fstream.open()
将失败。
如果文件不存在则创建
file.open("a.txt", ios_base::out);
或使用ofstream
ofstream file;
file.open("a.txt");
答案 1 :(得分:1)
默认情况下,fstream constructor和open function会打开以进行读/写。该文件必须已存在才能在此模式下打开。相反,打开写:
file.open("a.txt", ios::out);
答案 2 :(得分:0)
您的计划行为可能取决于operating system。顺便说一句,如果你想了解更多关于它们的信息,请阅读Operating Systems: Three Easy Pieces。也许当前的working directory已经包含要写入的文件或者没有适当的权限(它应该是可写的以启用文件创建)。详细信息是特定于操作系统(可能是file system)。 IIRC,一些操作系统(可能Windows)不允许打开已经由其他进程打开的文件。
在Linux上,您可以使用strace(1)来查找哪些系统调用失败(实际上,它会告诉您某些给定程序或system calls已执行的所有process)
这可能不是始终保证C ++标准(但请参阅sync_with_stdio),但许多C ++标准库高于(并兼容)C标准库,它设置{在失败上{3}}(另请参阅errno(3)和strerror(3) ...);然后你可以试试:
fstream file;
file.open("a.txt", ios::out);
if (!file) {
// perror("a.txt");
cout<<"Error in creating file!!!" << strerror(errno) << endl;
}
当然,正如其他答案告诉您(perror(3)&amp; this),您需要that的正确模式......
另见open