此代码编译正常但文件未创建?请指出错误

Posted

技术标签:

【中文标题】此代码编译正常但文件未创建?请指出错误【英文标题】:This code compiles fine but file is not created?Please point out the error 【发布时间】:2020-02-19 14:25:06 【问题描述】:

我刚刚开始文件处理并开始编写代码以使用二进制文件创建、读取和写入,我将结构传递给它并尝试运行它,但我发现代码中指定的任何文件都没有创建尽管代码编译得很好,但在我的目录中。

#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
struct Student

    char name[20];
    int student_id;
    char department[20];
    char address[30];
;
ostream & operator <<(ostream &out,Student &s1)

    out<<"Name: "<<s1.name<<endl;
    out<<"Student Id: "<<s1.student_id<<endl;
    out<<"Department: "<<s1.department<<endl;
    out<<"Address: "<<s1.address<<endl;

int main()

    Student s1;
    strcpy(s1.name, "Sandeep");
    s1.student_id = 1;
    strcpy(s1.department,"BCT");
    strcpy(s1.address, "New Baneshwor,Kathmandu");
    fstream file;  //file part
    file.open("Student.dat",ios::in | ios::out |ios::binary); //create a file
    file.write((char*)(&s1),sizeof(Student)); //write to it
    if(file.is_open())
    
        cout<<"nice"; //check if it's open(code not running)
    
    file.seekg(0);
    file.read((char*)(&s1),sizeof(Student)); //read from a file just created
    cout<<s1;
    if(file.fail())
    
        cout<<"Cannot create file"; //check if file is not created
    
    file.close();


【问题讨论】:

文件未创建,我检查过但不知道为什么? 您确定该目录是您期望的目录吗? 您应该在write 之前检查is_open。你的程序打印“nice”吗?你的工作目录是什么?它在你认为的地方吗?你有写权限吗?您是否尝试过硬编码完整路径? 是的,它应该在此代码所在的位置,并且对于其他类似的文件处理代码的结果也相似,并且它们可以工作 不,nice 没有打印出来…… 【参考方案1】:

因为您使用ios::in | ios::out,所以该文件必须已经存在。你可以这样做:

file.open("Student.dat", ios::in | ios::out | ios::binary);
if ( !file.is_open() ) 
   file.clear();
   file.open("Student.dat", ios::out | ios::binary );
   file.close();
   file.open("Student.dat", ios::in | ios::out | ios::binary);

无耻盗用from here

【讨论】:

非常感谢,它成功了。但是使用 fstream,如果文件不存在,它应该创建一个文件,不是吗? 不适用于ios::in,afaik。我认为ios::in 总是要求文件存在。 ios::out 没有。 @SandeepAcharya 或者如果您对覆盖文件(如果存在)很满意,您可以将 ios::trunc 与您拥有的其他标志一起添加到您的 open() 中。

以上是关于此代码编译正常但文件未创建?请指出错误的主要内容,如果未能解决你的问题,请参考以下文章

如何修复此代码,我没有收到错误,但数据未导出到 csv

当Coldfusion从'jar'文件中调用方法时,未编译的Java程序可以正常工作,但会产生错误?

获得 95% 发出未命名的兼容插件错误:未知:未知错误,打开

为啥我的jdk安装好了后,java程序能编译却不能运行啊?

Eclipse/Maven 错误:“此环境中未提供编译器”

Qt Creator在新项目中显示错误,但代码可以正常编译