我做了一个if else结构来检查文件是否存在。如果是这样,它应该进入while循环并添加一个整数并再次检查该文件是否存在。它应该与像"filename (1).ext"
这样的Windows的broswer相同。我有以下代码:
QFile file("messages/" + name + ".txt");
if(!file.exists())
{
file.open(QIODevice::WriteOnly | QIODevice::Text);
qDebug() << "file doesn't exist, saving complete";
QTextStream message_file(&file);
message_file << body;
file.close();
QMessageBox::about(0,"Succes!","Uw bericht is opgeslagen en verstuurd!");
}
else {
int n = 0;
qDebug() << "file does exist";
while(file.exists()){
n++;
QString nstring = QString::number(n);
qDebug() << "file exists sequence: " + nstring;
QFile file("messages/" + name + " (" + nstring +").txt");
}
file.open(QIODevice::WriteOnly | QIODevice::Text);
QTextStream message_file(&file);
message_file << body;
file.close();
QMessageBox::about(0,"Succes!","Uw bericht is opgeslagen en verstuurd!");
}
但是这段代码只是用原始文件名(当然)覆盖原始文件。所以它似乎没有改变QFile file
的路径。我的确是qDebug()
uptil infinite:
file exists sequence: 1
file exists sequence: 2
so on..
我做错了什么?
答案 0 :(得分:0)
我认为问题在于你在while循环中创建一个名为file的局部变量,它实际上并没有改变你调用的文件exists()on。
int n = 1;
while (n) int n = 0;
永远不会终止,它必须是:
int n = 1;
while (n) n = 0;
答案 1 :(得分:0)
while(file.exists()){
n++;
QString nstring = QString::number(n);
qDebug() << "file exists sequence: " + nstring;
QFile file("messages/" + name + " (" + nstring +").txt");
}
好像你混淆了作业和宣言。
QFile file;
在当前范围声明一个名为file的新变量。
int i = 1;
{
int i = 2;
std::cout << i << '\n';
}
std::cout << i << '\n';
打印“2”然后打印“1”。
您的代码中实际发生的是:
while(outer::file.exists()){
n++;
QString inner::nstring = QString::number(n);
qDebug() << "file exists sequence: " + inner::nstring;
QFile inner::file("messages/" + name + " (" + inner::nstring +").txt");
}
你可以这样做:
while(file.exists()){
n++;
QString nstring = QString::number(n);
qDebug() << "file exists sequence: " + nstring;
file.open("messages/" + name + " (" + nstring +").txt");
}