【问题标题】:fstream just wont create file [closed]fstream 只是不会创建文件 [关闭]
【发布时间】:2011-10-14 04:15:34
【问题描述】:

您好,我正在尝试使用 fstream 文件句柄执行以下操作:

  • 写入文件
  • 从文件中读取
  • 创建文件(如果不存在)

问题: 由于某种原因,我无法创建文件。

filepath= name + "/mails.txt";
mkdir(name.c_str(),0600);
log.open(filepath.c_str(), ios::in|ios::out|ios::ate);
if(!log.is_open())cout<<"error"<<endl;
log<<flush;

如果文件存在,它会做他的工作,但当文件不存在时,它不会。

编辑:因为我未能在评论中发布代码我在这里尝试:D

user::user(string aaa)
{
string filepath;
name=aaa;
filepath= name + "/mails.txt";
mkdir(name.c_str(),0666);


//toch("mails.txt",0600);
log.open(name.c_str(), ios::in|ios::out|ios::ate);
if(!log.is_open()){
    log.close();
    log.open(name.c_str(), ios::in|ios::out|ios::trunc);
}
if(!log.is_open())cout<<"error"<<endl;
log<<flush;
cout<<"message written"<<endl;
}

如果有像 mkdir 这样的系统命令来创建 .txt,我认为它也会有所帮助

【问题讨论】:

    标签: c++ filehandle


    【解决方案1】:

    使用ios::in 时,Fstream 无法创建文件。它只能打开现有文件。
    你应该做的是首先检查它是否打开了一个文件。如果没有,请关闭它,清除其状态,然后使用 ios::out 打开 - 这将创建文件。

    编辑:

    如果指定ios::trunc,则可以使用ios::in 创建文件。但是,如果该文件存在,那么您将删除其所有内容。

    【讨论】:

    • 您到底尝试了什么?你能粘贴你的代码吗?
    • user::user(string aaa) { string filepath;名称=aaa;文件路径=名称+“/mails.txt”; mkdir(name.c_str(),0666); //toch("mails.txt",0600); log.open(name.c_str(), ios::in|ios::out|ios::ate); if(!log.is_open()){ log.close(); log.open(name.c_str(), ios::in|ios::out|ios::trunc); } if(!log.is_open())cout
    • 而不是 log.open(name.c_str() 尝试使用 log.open(filepath.c_str() 否则代码很好 - 它为我创建了一个新文件。
    猜你喜欢
    • 2013-03-18
    • 1970-01-01
    • 2012-02-08
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    • 1970-01-01
    • 2013-10-31
    相关资源
    最近更新 更多