下面是代码:
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;
1条答案
按热度按时间y53ybaqx1#
您最多只能写入一个文件。在最后一个
for
循环的第一次迭代中,对于i==0
,内部while
循环读取file
直到EOF。在所有后续迭代中,file
已经处于EOF,并且所有getline
调用立即失败。(以names[0]
命名),但从未写入。