【发布时间】:2017-09-11 12:06:16
【问题描述】:
我正在尝试编写一个 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\8-1-2017,C:\Users\anrob\Pictures\SonyA100\2017\August\ 也将只有空的Week1 目录。
这是我当前的代码(请注意,我使用的是 Microsoft (R) C/C++ Optimizing Compiler Version 19.00.24225.1 for x64):
#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 这是一个受控的环境。我试图这样做只是为了更多地了解新的 C++17 文件系统库。一旦它工作,我将在照片组织和编辑程序上实现它。但是感谢您的提醒,我很感激!
-
我认为在迭代文件/目录时删除它们不是一个好主意。也许尝试将空目录的路径复制到一个向量,然后当你完成迭代时,将它们全部删除。
-
@BenjaminLindley 我已经尝试过了,但问题是某些目录只有在我删除其中的空目录时才会变为空......
标签: c++ recursion filesystems c++17