C++ 17ファイルシステムライブラリを使用して任意のルートディレクトリにある空のディレクトリをすべて再帰的に削除するC++スクリプトを作成しようとしています。私はこのコードサンプルで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
ディレクトリが、何もないだろう、C:\Users\anrob\Pictures\SonyA100\2017\August\Week1\8-1-2017
そして、私はこのパスにC:\Users\anrob\Pictures\SonyA100\2017\August\Week1\8-1-2017
が空であることを知っている:
だから、私は次のディレクトリ構造を持っていると言います。C++ 17 filesystem(実験的/ 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;
}
私がコンパイルし、このコードを実行し、それは一つだけを削除します。
はここに私の現在のコード(私はx64のために、Microsoft(R)C/C++最適化コンパイラバージョン19.00.24225.1を使っていることに注意してください)です空のディレクトリ(すなわち、C:\Users\anrob\Pictures\SonyA100\2017\August\Week1\8-1-2017
はなく、すべてのものすぐツーなる空のディレクトリ。
アドバイス - 私はあなたが気にしないファイルシステム上のディレクトリの削除をテストしている願っています:
最後には、ここで問題に私のソリューションです。 1つのバグ、1つのタイプミスなどがあり、重要なディレクトリを消去する可能性があります。 – PaulMcKenzie
@PaulMcKenzie管理された環境です。私は新しいC++ 17ファイルシステムライブラリの詳細を学ぶためにこれをやろうとしています。それがうまくいけば、私は写真の整理と編集のプログラムにそれを実装するつもりです。しかし頭のおかげでありがとう、私はそれを感謝する! –
ファイル/ディレクトリを繰り返し処理している間にファイルやディレクトリを削除するのは良い考えではないと思います。たぶん、空のディレクトリのパスをベクトルにコピーしてから、繰り返しを終えたら、すべて削除してください。 –