2017-06-16 38 views
1

如何刪除球拍中的非空目錄?刪除球拍編程語言中的非空目錄

當我調用這個API (刪除目錄DIR),其中dir是「/用戶/蘋果/庫/ Application Support/AOI」。有人告訴我:exn found:#(struct:exn:fail:filesystem:errno delete-directory:無法刪除目錄 path:/ Users/apple/Library/Application Support/aoi 系統錯誤:Directory not empty; errno = 66#(66。POSIX))

(define lib-folder '("/Users/apple/Library/Application Support/aoi")) 
(define (del-lib-folder) 
    (for-each (λ (p) 
       (printf "del lib folder:~a~n" p) 
       (if (directory-exists? p) 
        (delete-directory p) 
        (printf "folder does not exist:~a~n" p))) 
      lib-folder)) 

我錯過了什麼?

回答

3

在許多操作系統中,刪除目錄的命令僅在目錄爲空時才起作用。例如。在GNU

# rmdir dir 
rmdir: failed to remove 'dir/': Directory not empty 

通常需要一個遞歸刪除:

# rm -r dir 
# 

#lang racket你有一個刪除遞歸函數delete-directory/files。只是delete-directory/files更換delete-directory會做你想要什麼:

(define lib-folder '("/Users/apple/Library/Application Support/aoi")) 
(define (del-lib-folder) 
    (for-each (λ (p) 
       (printf "del lib folder:~a~n" p) 
       (if (directory-exists? p) 
        (delete-directory/files p) 
        (printf "folder does not exist:~a~n" p))) 
      lib-folder)) 

要非常小心,雖然在文件列表中的錯誤將不正是你問,你可能永遠不會得到這些文件備份。

0

使用刪除目錄/文件:

(define lib-folder '("/Users/apple/Library/Application Support/aoi")) 
(define (del-lib-folder) 
(for-each (λ (p) 
      (printf "del lib folder:~a~n" p) 
      (delete-directory/files #:must-exist? #f p)) 
     lib-folder))