私は以前これを行う方法を知っていたと思うが、私は忘れてしまったようだ。空のディレクトリアルゴリズムを削除して再帰を排除する
私は、再帰的なアルゴリズムは、ディレクトリツリー内のすべての空のディレクトリを削除する必要があります。私は、このアルゴリズムからの再帰を排除しようとしている
static bool DeleteDirectoriesRecursive(string path)
{
var remove = true;
foreach (var dir in System.IO.Directory.GetDirectories(path))
{
remove &= DeleteDirectoriesRecursive(dir);
}
if (remove &= (System.IO.Directory.GetFiles(path).Length == 0))
System.IO.Directory.Delete(path);
return remove;
}
、それほどではない、すなわち(アルゴリズムを「修正」し、 the similar questionは変数remove
を使用しませんが、私はそれを保ちたいと思います)。
Stack<>
クラスを使用して新しい機能を開始しましたが、基本パスに戻り、サブディレクトリが決定した操作を実行する良い方法はないと思います。私は非尾の再帰を解明するのにもう少し努力が必要だと思います。
1つのスタック(ILスタック)を別のスタック(あなたのもの)に置き換えたいのはなぜですか?あなたはこれから得るために何をしていますか? – zmbq
ナレッジベース。誰も私が生産コードでこれを行うつもりはないと言いました。 – palswim
@zmbq - それは私が考えていたものです。実際には、呼び出しスタックを使用してツリーをクロールするので、再帰の使用は非常に有効です。独自のスタックで同じことをしようとすると、コードがずっと長くなり、理解が難しくなり、パフォーマンス上の利点も得られません。 –