重命名文件时无限循环(Qt C ++)

时间:2014-05-30 22:22:10

标签: c++ qt

我做了一个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..

我做错了什么?

2 个答案:

答案 0 :(得分:0)

我认为问题在于你在while循环中创建一个名为file的局部变量,它实际上并没有改变你调用的文件exists()on。

int n = 1;
while (n) int n = 0;

永远不会终止,它必须是:

int n = 1;
while (n) n = 0;

答案 1 :(得分:0)

你是shadowing a variable

    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");
    }