2017-04-12 21 views
0

我不能使用boost,但只能使用glib和libc函數。在glib或libc中是否有類似boost :: filesystem :: remove_all(path)的函數?

如果您檢查glib,您會發現g_remove,g_rmdir和g_unlink,並且它們都不會刪除非空目錄。

我看過一篇文章,它實現了一個函數遞歸刪除Linux命令「rm -rf path」等目錄內的所有文件和子目錄。

我更喜歡使用在C.

您推薦哪家執行/ API井測試實施?

謝謝。

+0

你可以使用函數從GIO以及耍貧嘴? – ptomato

回答

0

沒有什麼目前GIO它實現的rm -rf相當於是的,但你可以建立一些東西,這是否很容易:

/* 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); 
} 
相關問題