删除目录中的所有文件

use*_*021 20 c++ qt

我需要使用Qt删除目录中的所有文件.

目录中的所有文件都将具有扩展名".txt".

我不想删除目录本身.

有谁知道我怎么做到这一点?我看过QDir,但没有运气.

rre*_*ves 47

Bjorns回答说不要永远循环

QString path = "whatever";
QDir dir(path);
dir.setNameFilters(QStringList() << "*.*");
dir.setFilter(QDir::Files);
foreach(QString dirFile, dir.entryList())
{
    dir.remove(dirFile);
}
Run Code Online (Sandbox Code Playgroud)

  • 这应该标记为正确答案:) (4认同)
  • 像魅力一样工作!:) (3认同)
  • 是否有使用通配符“ *。*”的特定原因?如果我要删除所有文件,只需一个星号(例如“ *”)就可以了,对吗? (2认同)

use*_*791 9

忽略txt扩展过滤...这是一种删除文件夹中所有内容的方法,包括非空子目录:

在QT5中,您可以在dirs上使用removeRecursively().不幸的是,这会删除整个目录 - 而不是仅清空它.这是一个基本的功能,只需清除目录的内容.

void clearDir( const QString path )
{
    QDir dir( path );

    dir.setFilter( QDir::NoDotAndDotDot | QDir::Files );
    foreach( QString dirItem, dir.entryList() )
        dir.remove( dirItem );

    dir.setFilter( QDir::NoDotAndDotDot | QDir::Dirs );
    foreach( QString dirItem, dir.entryList() )
    {
        QDir subDir( dir.absoluteFilePath( dirItem ) );
        subDir.removeRecursively();
    }
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以在要清除的目录上使用removeRecursively()(这将完全删除它).然后,在此之后使用相同的名称重新创建它...效果将是相同的,但代码行数较少.然而,这种更详细的功能提供了更多可能,如果需要,可以添加详细的异常处理,例如检测特定文件/文件夹的访问冲突......


Jer*_*ner 5

调用QDir :: entryList(QDir :: Files)获取目录中所有文件的列表,然后对于以".txt"结尾的每个fileName调用QDir :: remove(fileName)来删除该文件.


See*_*anJ -2

您可以在不使用 Qt 的情况下实现此目的:为此,opendir、readdir、unlink 甚至 rmdir 都将成为您的朋友。它很容易使用,只需浏览手册页即可;)。

  • 但我想使用 QT,就像我在问题中所说的那样。 (10认同)