如何在Linux上清除c++中的目录内容(基本上,我想做'rm -rf< directorypath>/*'

mnemlml8  于 2023-05-16  发布在  Linux
关注(0)|答案(3)|浏览(142)

我在Linux(Ubuntu)上写了一个C++程序。我想删除目录的内容。它可以是松散的文件或子目录。
本质上,我想做一些与

rm -rf <path-to-directory>/*

你能建议在c++中做这件事的最好方法沿着所需的头文件吗?是否可以使用sys/stat.h或sys/types.h或sys/dir.h来完成此操作?!

mf98qq94

mf98qq941#

使用nftw()(文件树遍历)函数,并带有FTW_DEPTH标志。提供一个回调函数,它只对传入的文件调用remove()

#define _XOPEN_SOURCE 500
#include <stdio.h>
#include <ftw.h>
#include <unistd.h>

int unlink_cb(const char *fpath, const struct stat *sb, int typeflag, struct FTW *ftwbuf)
{
    int rv = remove(fpath);

    if (rv)
        perror(fpath);

    return rv;
}

int rmrf(char *path)
{
    return nftw(path, unlink_cb, 64, FTW_DEPTH | FTW_PHYS);
}

如果不想删除基目录本身,请更改unlink_cb()函数以检查级别:

int unlink_cb(const char *fpath, const struct stat *sb, int typeflag, struct FTW *ftwbuf)
{
    int rv;

    if (ftwbuf->level == 0)
        return 0;

    rv = remove(fpath);

    if (rv)
        perror(fpath);

    return rv;
}
l3zydbqr

l3zydbqr2#

在Boost中,它是通过remove_all完成的

shstlldc

shstlldc3#

system ("rm -rf <path-to-directory>");

相关问题