如何在Common Lisp中删除一个目录

3

要在Common Lisp中删除文件,我可以执行以下操作:

(delete-file "c:\\path\\to\\file")

但是由于某些原因我无法找到如何删除目录的方法。没有delete-directory函数,当我将一个目录路径传递给delete-file函数时会得到以下错误:

couldn't delete c:\path\to\folder: Unknown error
   [Condition of type SB-INT:SIMPLE-FILE-ERROR]

谷歌搜索也没有帮助。

我正在Windows上使用Steel Banks Common Lisp,使用Lispstick进行安装。

3个回答

6

Uiop是ASDF 3自带的库,具有delete-empty-directorydelete-directory-tree功能。

为了实现可移植性,请务必使用这种封装库。


1

当我用Google搜索“common lisp delete directory”时,它立即向我推荐了cl-fad。我猜这可能会很有用(但我从未尝试过)。


1
是的,我看到了那个,但我认为像CL这样的大型语言应该能够在不使用第三方库的情况下删除目录 :) - Torbjørn
2
不需要。文件和目录的概念非常依赖于系统,并且在Common Lisp标准化时更是如此。因此,执行这些操作的语义留给了实现。 - Svante

-2

我自己找到了解决方案。我查看了cl-fad的源代码(在其他答案中提到),发现它基本上为不同的Common Lisp实现使用了不同的扩展名。由于我正在使用Steel Banks Common Lisp,所以我的解决方案是:

(sb-ext:delete-directory "c:\\path\\to\\folder\\")

对于大多数其他实现,你基本上需要将sb-ext替换为所涉及实现的扩展包的名称。

6
不使用cl-fad,这不会影响您原本可以获得的兼容性吗? - Sylwester
2
那么,与其依赖于可移植性库,现在您需要依赖手动替换步骤来安装不同CL实现的软件。这真的是一个胜利吗? - Svante

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接