c++ Ofstream创建但不写入文件

qhhrdooz  于 2023-01-10  发布在  其他
关注(0)|答案(1)|浏览(247)

下面是代码:

void makefiles(char* filename) {
    ifstream file(filename, ios::in);

    // number of entries in main file 
    int size = 0;

    // names is the vector that holds entries 
    vector<string> names;
    string tmpstr;

    while (getline(file, tmpstr)) {
        string toadd = "";
        for (int i = 0; i < tmpstr.size(); i++) {
            if (tmpstr[i] != '|')
                toadd += tmpstr[i];
            else
                break;
        }
        if(count(names.begin(), names.end(), toadd) == 0)
            names.push_back(toadd);
        size++;
    }
    file.close();

    ofstream userfile;
    file.open(filename, ios::in);
    for (int i = 0; i < names.size(); i++) {
        userfile.open(string(getenv("TEMP")) + "\\" + names[i] + ".txt", ios::out);
        
        cout << string(getenv("TEMP")) + "\\" + names[i] + ".txt" << endl;
        
        while (getline(file, tmpstr)) {
            if (tmpstr.rfind(names[i], 0) == 0) {
                userfile << tmpstr << endl;
                userfile.flush();
            }
        }
        userfile.close();
    }

    file.close();

}

此函数从main调用,filename包含一些格式化文本,如下一视图的电子邮件数据库:

gottaletitout@gmail.com|timetogo@gmail.com|06.01.2023|21:09:30|born in the abyss|156
gottaletitout@gmail.com|timetogo@gmail.com|06.01.2023|21:09:30|born in the abyss|156
a@gmail.com|b@gmail.com|23.12.2009|13:52:16|prikol|13
hottaletitout@gmail.com|timetogo@gmail.com|06.01.2023|21:09:30|aorn in the abyss|156

因此,一行是一个条目
总之,我得到了许多具有我想要的名称的空文件,但是,同样,它们是空的
我尝试在打开用户文件后添加:

if(!userfile){
    cout << "File is not opened" << endl;
    return;
}

但它没有帮助,因为! userfile = false
我尝试使用用户文件〈〈tmpstr〈〈flush来代替用户文件〈〈tmpstr〈〈endl;

y53ybaqx

y53ybaqx1#

您最多只能写入一个文件。在最后一个for循环的第一次迭代中,对于i==0,内部while循环读取file直到EOF。在所有后续迭代中,file已经处于EOF,并且所有getline调用立即失败。(以names[0]命名),但从未写入。

相关问题