私は自分のアプリケーションでglibを使用していますが、GlibにはCとの便利なラッパーがあることがわかりremove
ます。ただし、これらは一度に1つのファイルまたはディレクトリでのみ機能します。unlink
rmdir
私が見る限り、C標準もglibも、再帰的なディレクトリウォーク機能を含んでいません。また、のように、ディレクトリツリー全体を一度に削除する特定の方法もわかりませんrm -rf
。
私がこれを行っていることについては、アクセス許可、ツリーをバックアップするシンボリックリンク(無限再帰)、または非常に単純な実装を除外するものなどの複雑さについては心配していません...したがって、私は自分自身を書くことを嫌いではありませんそのための機能。
しかし、この機能が標準ライブラリのgtkまたはglib(または他の簡単に再利用できるCライブラリ)のどこかにすでにあるのかどうか知りたいのですが、私はそれを見つけたことがありません。このトピックをグーグルで検索すると、多くの誤ったリードが生成されます。
それ以外の場合、私の計画はこのタイプのアルゴリズムを使用することです。
dir_walk(char* path, void* callback(char*) {
if(is_dir(path) && has_entries(path)) {
entries = get_entries(path);
for(entry in intries) { dir_walk(entry, callback); }
}
else { callback(path) }
}
dir_walk("/home/user/trash", remove);
明らかに、致命的なエラーが発生するとすぐにプロセスを中止するために、いくつかのエラー処理などを組み込みます。