在x元素之后,从QT中删除x元素之后的文件夹中的项目

Deleting items in a folder after X elements, from oldest, in Qt

本文关键字:之后 元素 文件夹 项目 删除 QT      更新时间:2023-10-16

基本上我有一个目录,我最想存储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包装到x元素中,那么我不确定下一个元素要删除哪个收到的文件。

1)您可以将epoch时间用作文件名的一部分,而不是使用任意增量变量,该变量永远不会重置或重复使用。

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个文件时删除旧文件。