我想写一个C++脚本,它使用C++ 17文件系统库递归地删除在任何给定根目录中找到的所有空目录让事情更清晰我将使用此代码示例中的cwd)。
所以,说我有以下目录结构:C:\Users\anrob\Pictures\SonyA100\2017\August\Week1\8-1-2017
我知道,在这条道路C:\Users\anrob\Pictures\SonyA100\2017\August\Week1\8-1-2017
是空的,C:\Users\anrob\Pictures\SonyA100\2017\August\Week1
有什么,但8-1-2017
空目录,并C:\Users\anrob\Pictures\SonyA100\2017\August\
也没有什么,但空Week1
目录一旦我们删除C:\Users\anrob\Pictures\SonyA100\2017\August\Week1\8-1-2017
。
这里是我当前的代码(请注意,我使用的是Microsoft(R)C/C++优化编译器版本19.00.24225.1针对x64):C++ 17文件系统(在Windows上的实验/文件系统)递归地删除所有空目录
#include <experimental/filesystem>
int main() {
std::experimental::filesystem::path top =
std::experimental::filesystem::current_path(),
dir_path;
for (auto& p:
std::experimental::filesystem::recursive_directory_iterator(top)) {
dir_path = p.path();
while (std::experimental::filesystem::is_directory(dir_path) &&
std::experimental::filesystem::is_empty(dir_path)) {
std::experimental::filesystem::remove(dir_path);
dir_path = dir_path.parent_path();
}
}
return 0;
}
当我编译并运行此代码,它不仅能消除一个空目录(即C:\Users\anrob\Pictures\SonyA100\2017\August\Week1\8-1-2017
,而不是所有的也即将成为空目录。
建议 - 我希望你你不关心的文件系统上测试去除目录。一个错误,一个错字等,你最终可能会删除一个重要的目录。 – PaulMcKenzie
@PaulMcKenzie这是一个受控的环境。我试图做这个只是为了了解更多关于新的C++ 17文件系统库。一旦它起作用,我将在照片组织和编辑程序中实施它。但是,谢谢你的头,我很感激! –
我希望在迭代文件/目录的时候删除文件/目录并不是一个好主意。也许尝试将空目录的路径复制到矢量中,然后在完成迭代时删除所有这些路径。 –