c++(文件和流)程序中创建文件时出现的错误

Error in a C++(files and streams) program for creating a file

本文关键字:文件 错误 创建 程序 c++      更新时间:2023-10-16

我已经编写了这个程序,以便使用fstream创建一个文件,输出应该显示文件是否已创建。我已经在几个在线编译器上运行它,如Codechef c++ shell等。编译器已经成功编译了这个程序,但是输出没有相应的显示,而不是说file created编译器说error in creating file。这是否与开发工具有关?

下面是程序的代码:

#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();
    }
} 
如果文件不存在,

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

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

或者使用ofstream

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

fstream构造函数和open函数默认为读写打开。该文件必须已经存在才能以这种模式打开。相反,打开for write:

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

程序的行为可能取决于操作系统。顺便说一句,如果你想了解更多,请阅读操作系统:三个简单的部分。也许当前工作目录已经包含要写入的文件,或者没有适当的权限(它应该是可写的,以启用文件创建)。细节是特定于操作系统(可能还有文件系统)的。IIRC,一些操作系统(可能是Windows)不允许打开已经被其他进程打开的文件。

在Linux上,您可以使用strace(1)来找出哪些系统调用失败了(实际上,它告诉您某个给定程序或进程执行的所有系统调用)。

这[可能]不是c++标准保证的总是,但许多c++标准库都在(并兼容)C标准库之上,在失败时设置errno(3)(另见strerror(3)和perror(3)…);那么你可以试试:

 fstream file; 
 file.open("a.txt", ios::out);
 if (!file) {
     // perror("a.txt");
     cout<<"Error in creating file!!!" << strerror(errno) << endl;
 }

当然,正如其他答案告诉你的那样(这个&你需要正确的模式打开…

参见std::system_error