用于创建文件的C ++(文件和流)程序出错

时间:2016-11-02 19:34:30

标签: c++ fstream

我已编写此程序以使用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();
    }
} 

3 个答案:

答案 0 :(得分:2)

如果文件不存在,

fstream.open()将失败。 如果文件不存在则创建

file.open("a.txt", ios_base::out);

或使用ofstream

ofstream file;
file.open("a.txt");

答案 1 :(得分:1)

默认情况下,fstream constructoropen 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