关于Direct IO的改进请求
发表于 : 周四 10月 31, 2019 7:55 pm
看上去,windows的canonicalize函数可以获得文件的绝对路径
在SCSI模式中,函数是有效的
但在Direct IO模式,使用函数会直接报错
——我遇到的问题是,Rust语言使用canonicalize函数获得文件的绝对路径,当canonicalize失败的时候,`cargo build`命令会直接失败
一个简单的例子,如果B盘是SCSI而Z盘是DirectIO在安装rust并将rust的cargo放在环境变量%path%中之后,执行这段命令会得到
很显然canonicalize函数并没有将DirectIO盘中的文件转化成\\?\Z:\hello\src的能力。
希望在Primo Ramdisk的Direct IO功能能在下一个版本中加入对Rust语言的支持
(类似的东西似乎在.net 4.8版本也出现了(https://docs.microsoft.com/en-us/dotnet ... mework-4.8),虽然标记了过时,虽然我没测试这东西是否支持directIO盘,但我仍然有点害怕那天把unity游戏拷到directIO盘之后报BUG)
(现在只好SCSI保平安了)
在SCSI模式中,函数是有效的
但在Direct IO模式,使用函数会直接报错
——我遇到的问题是,Rust语言使用canonicalize函数获得文件的绝对路径,当canonicalize失败的时候,`cargo build`命令会直接失败
一个简单的例子,如果B盘是SCSI而Z盘是DirectIO
代码: 全选
cd/d Z:\
cargo build hello
cd/d B:\
cargo build hello
cd hello
rem rust函数开始
echo fn main() { > src/main.rs
echo println!("{:?}",std::fs::canonicalize(r"B:\hello\src")); >> src/main.rs
echo println!("{:?}",std::fs::canonicalize(r"Z:\hello\src")); >> src/main.rs
echo } >> src/main.rs
rem rust函数结束
cargo run
代码: 全选
Compiling hello v0.1.0 (B:\hello)
Finished dev [unoptimized + debuginfo] target(s) in 1.20s
Running `target\debug\hello.exe`
Ok("\\\\?\\B:\\hello\\src")
Err(Os { code: 1, kind: Other, message: "函数不正确。" })
希望在Primo Ramdisk的Direct IO功能能在下一个版本中加入对Rust语言的支持
(类似的东西似乎在.net 4.8版本也出现了(https://docs.microsoft.com/en-us/dotnet ... mework-4.8),虽然标记了过时,虽然我没测试这东西是否支持directIO盘,但我仍然有点害怕那天把unity游戏拷到directIO盘之后报BUG)
(现在只好SCSI保平安了)