2017-04-12 4 views
0

私はブーストを使うことはできませんが、glibとlibcの機能のみを使用しています。glibやlibcのboost :: filesystem :: remove_all(path)と同様の機能はありますか?

glibをチェックすると、g_remove、g_rmdir、およびg_unlinkが見つかり、空でないディレクトリは削除されません。

私はLinuxコマンド "rm -rf path"のようなディレクトリ内のすべてのファイルとサブディレクトリを再帰的に削除する機能を実装した記事を見てきました。

私はあなたがどの実装/ APIをお勧めしますC.

で十分にテスト実装を使用することを好みますか?

ありがとうございました。

+0

あなたはGIOなどのGLibからの関数を使用することはできますか? – ptomato

答えて

0

ありrm -rfと同等のものを実装して、現在GIOには何もありませんが、あなたはそのかなり簡単にし、何かを構築することができます:

/* Recursively delete @file and its children. @file may be a file or a directory. */ 
static gboolean 
rm_rf (GFile   *file, 
     GCancellable *cancellable, 
     GError  **error) 
{ 
    g_autoptr(GFileEnumerator) enumerator = NULL; 

    enumerator = g_file_enumerate_children (file, G_FILE_ATTRIBUTE_STANDARD_NAME, 
              G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, 
              cancellable, NULL); 

    while (enumerator != NULL) 
    { 
     GFile *child; 

     if (!g_file_enumerator_iterate (enumerator, NULL, &child, cancellable, error)) 
     return FALSE; 
     if (child == NULL) 
     break; 
     if (!rm_rf (child, cancellable, error)) 
     return FALSE; 
    } 

    return g_file_delete (file, cancellable, error); 
} 
関連する問題