fstream就是不会创建文件

时间:2011-10-14 04:15:35

标签: c++ filehandle

您好我正在尝试使用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这样的系统commant用于创建.txt,那么我认为这也有帮助

1 个答案:

答案 0 :(得分:2)

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

编辑:

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