【发布时间】:2016-10-16 18:18:23
【问题描述】:
使用基于 Qt 5.2.0(MSVC 2010, 32bit) 的 QtCreator 3.0.0。
我正在尝试构建一个简单的文件处理应用程序;基本上:
1- 用户按下按钮 -> 弹出对话框。
2- 用户选择带有纯文本内容的文件(.txt)。
3-应用程序处理文件并在其中创建包含许多文件(.txt)的文件夹,在所选文件所在的同一文件夹中。
到目前为止,好的;现在,如果用户(不重新启动应用程序)重新执行前 3 个步骤,则该过程会重复,但这次输出有一个缺陷:创建的文件夹中的结果文件将其内容加倍,如将新内容附加到一个已经存在的,而不是删除/清空,然后根据需要用新内容重新创建/重新填充自己。
我尝试使用以下命令删除和/或清空文件:
//code fragment
input = new fstream();
output = new fstream();
address = dialog->selectedFiles().first();
input->open(address.toLatin1(), ios_base::in | ios_base::binary);
QString results_folder_name = "RESULTS";
int lastSlash = address.lastIndexOf("/");
results = new QDir(address.left(lastSlash));
if(results->exists(results_folder_name)){
results->cd(results_folder_name);
results->setNameFilters(QStringList() << "*.*");
results->setFilter(QDir::Files);
foreach(QString dirFile, results->entryList()){
results->remove(dirFile);
}
}else{
results->mkdir(results_folder_name);
results->cd(results_folder_name);
}
然后有一个 WHILE 循环用于创建和填充每个结果文件,
我为每个变量使用相同的变量output(不知道该怎么做)然后我
output.close(); 和
delete output;
在循环结束之前
任何解决方法都可以,谢谢
编辑:
实际上有两个 while 循环我没有包括在内,第一个(我认为没有必要包括在内)是用于迭代 input 变量并存储变量 extensions 中的信息/字符串,after 是我迭代该变量的实际 while 循环并分发结果文件中的内容,如下所示:
QMap<QString, QStringList>::const_iterator i = extensions.constBegin();
while(i != extensions.constEnd()){
QString newExtensionPath = results.absolutePath() + '/' + i.key() + ".txt";
output.open(newExtensionPath.toLatin1(), ios_base::out | ios_base::binary | ios_base::trunc);
if(output.is_open()){
QStringList value = i.value();
while(!value.empty()){
QString first = value.takeFirst();
output.write(first.toLatin1(), first.size());
output.write("\n", 1);
}
} else{msg.setText("error");msg.exec();}
output.close();
i++;
}
delete output;
现在,请记住,这段代码不会引发错误或类似的事情,如果我想要的是将内容附加到每个文件而不是重写(这是我真正需要的),它会像一个魅力一样工作.
而且,非常重要:
1-如果我在不重新启动应用程序的情况下继续重复该过程(关闭应用程序窗口并在 Qt 上再次按 Ctrl+R)文件确实会被删除(我每次都检查它们)但是当再次创建时,内容会增加一倍,三倍,翻两番等。
2-如果我重新启动应用程序,每次它第一次运行算法时它都可以正常工作。
如果太乱,请告诉我,以便我解释得更好。
感谢
【问题讨论】: