我需要一种方法来获取正在运行的脚本的路径(包含源文件的目录),但是 (current-directory) 从不指向那里(在这种情况下是外部驱动器),而是指向某个预定义的位置. 我创建了一个文件来尝试
(current-directory)
从不指向那里(在这种情况下是外部驱动器),而是指向某个预定义的位置.
我创建了一个文件来尝试所有’find-system-path’,但它们都不是正在运行的文件! Racket文档没有帮助.
#lang web-server/insta (define (start request) (local [{define (build-ul items) `(ul ,@(map itemize items))} {define (itemize item) `(li ,(some-system-path->string (find-system-path item)))}] (response/xexpr `(html (head (title "Directories")) (body (h1 ,"Some Paths") (p ,(build-ul special-paths))))))) (define special-paths (list 'home-dir 'pref-dir 'pref-file 'temp-dir 'init-dir 'init-file ;'links-file ; not available for Linux 'addon-dir 'doc-dir 'desk-dir 'sys-dir 'exec-file 'run-file 'collects-dir 'orig-dir))
目的是本地Web服务器应用程序(音乐服务器),它将修改包含源文件的目录下的子目录.我将在USB记忆棒上携带应用程序,因此我需要能够找到自己的目录,因为我在安装了Racket的机器和操作系统之间进行了该目录.
简单方法:获取正在运行的脚本名称,使其成为完整路径,然后获取其目录:(path-only (path->complete-path (find-system-path 'run-file)))
但是你更有可能不会对用于执行事物的文件(Web服务器)感兴趣,而是在你将代码放入的实际源文件中.也就是说,你希望一些资源接近你的源代码.一种较老的方法是:
(require mzlib/etc) (this-expression-source-directory)
更好的方法是使用`runtime-path’,这是一种定义这些资源的方法:
(require racket/runtime-path) (define-runtime-path my-picture "pic.png")
这是更好的正弦,它还将路径注册为您的脚本所依赖的东西 – 因此,如果您将代码打包为安装程序,例如,Racket也会知道打包该png文件.
最后,您可以使用它指向整个目录:
(define-runtime-path HERE ".") ... (build-path HERE "pic.png") ...