我在Linux(Ubuntu)上写了一个C++程序。我想删除目录的内容。它可以是松散的文件或子目录。本质上,我想做一些与
rm -rf <path-to-directory>/*
你能建议在c++中做这件事的最好方法沿着所需的头文件吗?是否可以使用sys/stat.h或sys/types.h或sys/dir.h来完成此操作?!
mf98qq941#
使用nftw()(文件树遍历)函数,并带有FTW_DEPTH标志。提供一个回调函数,它只对传入的文件调用remove():
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()函数以检查级别:
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; }
l3zydbqr2#
在Boost中,它是通过remove_all完成的
remove_all
shstlldc3#
system ("rm -rf <path-to-directory>");
3条答案
按热度按时间mf98qq941#
使用
nftw()
(文件树遍历)函数,并带有FTW_DEPTH
标志。提供一个回调函数,它只对传入的文件调用remove()
:如果不想删除基目录本身,请更改
unlink_cb()
函数以检查级别:l3zydbqr2#
在Boost中,它是通过
remove_all
完成的shstlldc3#