当前位置 : 主页 > 网络推广 > seo >

Racket:如何检索正在运行的文件的路径?

来源:互联网 收集:自由互联 发布时间:2021-06-16
我需要一种方法来获取正在运行的脚本的路径(包含源文件的目录),但是 (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") ...
网友评论