Rust文件路径和访问的澄清

3

我刚接触 Rust,想要了解有关 Rust 文件路径的内容,包括如何读取项目目录之外的文件。例如,如果我想读取桌面上的 .txt 文件,我会大致按照以下方式操作:

fs::read_to_string("./Desktop/test.txt");

然而,这似乎并不起作用。这是文件路径有问题还是Rust只允许访问项目目录中的文件?如果这是默认情况,如何允许访问系统中其他位置的文件,而不在当前工作目录中? 假设项目在“文档”中,我们想要访问桌面上的某个文本文件。 找到了答案,看起来我需要这样的路径:
fs::read_to_string("/Desktop/test.txt");

看起来“.”是在当前目录中寻找。


你的可执行文件是否与桌面在同一个目录下? - Chayim Friedman
1
当您运行程序时,该路径将相对于当前工作目录。 - harmic
@ChayimFriedman 这种情况是对的,但我不想依赖于这种情况。 - dan-Ai
@harmic 如果这是相对于项目目录的,我们如何将其表示为绝对文件路径? - dan-Ai
2个回答

5
当您打开以./开头的路径时,它是相对于当前工作目录的。
假设程序本身没有更改工作目录,那么用户启动可执行文件时所在的目录就是当前工作目录。
请注意,这不一定是项目目录:在开发程序时,您可能会通过cargo run运行它,但当它准备好后,您很可能会将目标可执行文件复制到路径中的某个目录。工作目录可以完全不同于放置可执行文件的目录。
您的程序可以通过调用std::env::current_dir来找出当前的工作目录。
如果您想要一个与工作目录无关的路径,则可以使用绝对路径,即以/开头。
在这方面,Rust与任何其他编程语言没有区别。特别地,文件不是相对于项目目录打开的。

1
如指定的,路径将相对于进程的工作目录。如果工作目录不是您的主目录,则需要更具体地指定文件在哪里。
请注意,工作目录可以根据程序运行方式而改变。上面的链接提供了更多关于此主题的信息。
您可以使用{{link2:dirs包中的desktop_dir}}来获取用户的桌面目录,在这种特殊情况下,工作目录将不相关。它还可以正确确定许多不同操作系统上的用户桌面目录。
fs::read_to_string({
    let mut path = dirs::desktop_dir().expect("no desktop directory");
    path.push("test.txt");
    path
})

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