CreateFileW
,但它间歇性失败并出现 NotFound
错误。
例如
path_name = "C:\\".encode_utf16().collect::<Vec<_>>()
CreateFileW(
path_name.as_ptr(),
0,
FILE_SHARE_READ,
null(),
OPEN_EXISTING,
FILE_FLAG_BACKUP_SEMANTICS,
null::<*mut c_void>() as HANDLE,
);
关于为什么会发生这种情况以及如何解决它有什么想法吗?
Rust 中的字符串不是以零结尾的。对于字符串文字也是如此。与 C 不同,
"C:\\"
末尾没有隐式 NUL 字符。当您将指针传递到 API 时,它将继续读取末尾,直到找到 NUL 字符。
请注意,这是一个绝对需要解决的内存安全错误。
值得庆幸的是,修复并不难。您只需要手动添加 NUL 终止符即可。以下将做:
use std::iter::once;
let path_name = "C:\\".encode_utf16().chain(once(0)).collect::<Vec<_>>();