我有一个包含一些相关资产(Lua脚本)的项目,我需要在运行时找到它。这可能意味着两件事:
cargo run
),我想找到它相对于源cargo install
安装时,资产也应安装在某处,并且已安装的可执行文件版本应找到已安装的资产。我知道使用include_str!()
之类的东西将文本文件编译成二进制文件的选项,但在这种情况下我不想这样做。
据我所知,cargo install
doesn't have any support for installing anything other than the executable at the moment,这是第一个问题,但我不介意有一个包装器安装脚本来帮助。
答案 0 :(得分:3)
根据您希望它的结构,您可以尝试混合使用env::current_dir
来获取当前目录,如果找不到任何内容,您可以尝试使用可执行路径并从那里加载内容。你可以通过env::current_exe
得到它。
我看到了难度,即cargo install
仅将二进制文件复制到.cargo/bin
,这意味着其他资源会保留在位于.cargo/registry/src/...
的源文件夹中
在这种情况下,我agree with @ljedrz include!
似乎是唯一的方法。
答案 1 :(得分:0)
在我的私人项目中,我必须用include_bytes!
替换“开放,搜索,阅读”,因为正如您所写,cargo install
不处理资产。这是一个例子:
File::open
版
let mut f = File::open("examples/vertices.npy")
.expect("Can't read file 'examples/vertices.npy'");
f.seek(SeekFrom::Start(80)).unwrap();
let mut reader = BufReader::new(f);
include_bytes!
版
let vertices_bytes = include_bytes!("vertices.npy");
let mut reader = BufReader::new(&vertices_bytes[80..]);
我仍然更喜欢普通读卡器,当Rust支持它时我会更改它,但在我们等待的时候它仍然是一个很好的解决方案。