2017-06-16 42 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))