在Racket编程语言中删除非空目录

在Racket编程语言中删除非空目录,racket,Racket,如何删除Racket中的非空目录 当我调用这个api(delete directory),其中dir是“/Users/apple/Library/Application Support/aoi”,我被告知: exn found:#(struct:exn:fail:filesystem:errno delete-directory: cannot delete directory path: /Users/apple/Library/Application Support/aoi syst

如何删除Racket中的非空目录

当我调用这个api
(delete directory)
,其中
dir
“/Users/apple/Library/Application Support/aoi”
,我被告知:

exn found:#(struct:exn:fail:filesystem:errno delete-directory: cannot delete directory
  path: /Users/apple/Library/Application Support/aoi
  system error: Directory not empty; errno=66 #<continuation-mark-set> (66 . posix))

我遗漏了什么吗?

在许多操作系统中,只有当目录为空时,删除目录的命令才起作用。例如,在GNU中

# rmdir dir
rmdir: failed to remove 'dir/': Directory not empty
通常需要递归删除:

# rm -r dir
#
#lang racket
中,您具有递归删除的功能。只需将
delete directory
替换为
delete directory/files
即可:

(定义lib文件夹“(“/Users/apple/Library/Application Support/aoi”))
(定义(dellib文件夹)
(对于每个(λ(p)
(printf“del lib文件夹:~a~n”p)
(如果(目录存在?p)
(删除目录/文件p)
(printf“文件夹不存在:~a~n”p)))
库文件夹)

但是要非常小心,因为文件列表中的错误将完全按照您的要求执行,并且您可能永远无法取回这些文件。

使用删除目录/文件:

(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))
(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))