如果文件名已存在于 C++ Qt 中,则用增量编号重命名文件

问题描述 投票:0回答:1

我的目标是确定特定文件夹中尚未采用的文件名,以便保存它而不删除任何文件。

例如,如果

myname.txt
存在,我们应该添加增量数字,如-0000,这样它就变成
myname-0000.txt
。如果
myname.txt
myname-0000.txt
同时存在,则确定的文件名应为
myname-0001.txt
,依此类推。

此外,我们想用 C++/Qt 编写代码。

c++ qt file filenames increment
1个回答
0
投票

我的解决方案是这段代码(如果您认为有更好的代码,请告诉我):

// returns the path that will not erase any existing file, with added number in filename if necessary
// argument : the initial path the user would like to save the file
QString incrementFilenameIfExists(const QString &path)
{
    QFileInfo finfo(path);
    if(!finfo.exists())
        return path;

    auto filename = finfo.fileName();
    auto ext = finfo.suffix();
    auto name = filename.chopped(ext.size()+1);

    auto lastDigits = name.last(4);

    if(lastDigits.size() == 4 && lastDigits[0].isDigit() && lastDigits[1].isDigit() && lastDigits[2].isDigit() && lastDigits[3].isDigit() && lastDigits != "9999")
        name = name.chopped(4)+(QString::number(lastDigits.toInt()+1).rightJustified(4,'0'));
    else
        name.append("-0000");

    auto newPath = (path.chopped(filename.size()))+name+"."+ext;
    return incrementFilenameIfExists(newPath);
}
© www.soinside.com 2019 - 2025. All rights reserved.