c++ 在Qt中删除文件夹中X个元素之后的项目,从最旧的开始

uajslkp6  于 2023-11-19  发布在  其他
关注(0)|答案(1)|浏览(105)

基本上,我有一个目录,我希望最多存储X个元素,在此之后,添加的每个文件都必须触发删除最旧的存储元素。所以我想在QFileInfoList中按时间对它们进行排序,但遗憾的是,这取决于系统时间(如果用户将时钟旋转Y小时,则最新添加的文件将被认为是最旧的,因此将被删除)这是我到目前为止写的关于系统时间的问题:

void namespace::cleanStationLogoDir()
{
    QDir dir(DIR);
    if(!dir.exists())
    {
        //Create directory
        if(dir.mkpath(DIR))
        {
            //Ok result
        }
        else
        {
            qDebug() << "Unable to create dir.";
        }
    }

    QFileInfoList files = dir.entryInfoList(QDir::Files | QDir::NoDotAndDotDot, QDir::Time);
    qDebug() << "files size: " << files.size();

    while(files.size() > X)
    {
        qDebug() << "Removed last element" << files.last().filePath();
        dir.remove(files.takeLast().filePath());
        qDebug() << "files size: " << logo_files.size();
    }
}

字符串
你知道其他的方法吗?我考虑在存储文件的时候给文件名添加一个递增的ID,但是在max_INT文件之后,这可能会成为一个问题,或者如果我把ID Package 到X元素中,那么我不确定在下一个文件中删除哪个。

6tr1vspr

6tr1vspr1#

1)你可以使用epoch time作为文件名的一部分,而不是使用一个任意的增量变量,它显然永远不会重置或重用。
2)您可以使用QFileInfo,就像您可以更改现有逻辑一样,

QFileInfoList files = dir.entryInfoList(QDir::Files | QDir::NoDotAndDotDot, QDir::Time | QDir::Reversed);
const int  MAX_NUM_FILES_TO_RETAIN = 10

for(int index = files.size(); index > MAX_NUM_FILES_TO_RETAIN; --index)
{
     const QFileInfo& info = files.at(index -1);
     QFile::remove(info.absoluteFilePath());
}

字符串
代码将删除旧文件,同时保留最近的10个文件。

相关问题