Rust 如何将路径转换为FFI的常量字符*?

Rust 如何将路径转换为FFI的常量字符*?,rust,Rust,我想取一个代表文件位置的, 并将其传递到C库中,以将图像保存到该位置 我可以看到,我可以将PathBuf转换成一个,使用,我可以将它转换成Vec,从那里开始,转换成一个,但这似乎有点复杂和特定于平台 这真的是我们目前能做的最好的了吗?就我所知,其他一切都可以在Windows上运行,因此我不想仅在这样一个小问题上将其限制在Unix上。假设您试图包装类似于cairo\u surface\u write\u to \u png的东西,那么您最好自己在cairo\u surface\u write\u

我想取一个代表文件位置的, 并将其传递到C库中,以将图像保存到该位置

我可以看到,我可以将
PathBuf
转换成一个,使用,我可以将它转换成
Vec
,从那里开始,转换成一个,但这似乎有点复杂和特定于平台


这真的是我们目前能做的最好的了吗?就我所知,其他一切都可以在Windows上运行,因此我不想仅在这样一个小问题上将其限制在Unix上。

假设您试图包装类似于
cairo\u surface\u write\u to \u png
的东西,那么您最好自己在
cairo\u surface\u write\u to png\u stream
方面实现它,对文件IO使用Rust


问题或多或少在于Windows上的路径是UTF-16,而且(据我所知)Windows不会接受能够正确存储所有可能路径的8位编码(即可表示为
const char*
)。实际上,如果您在Windows上对路径使用
const char*
,那么您就错了™.


窗户上既不使用UTF-16也不使用UTF-8,锈迹就可以解决这个问题;相反,它使用UTF-8的非标准扩展对整个UTF-16空间进行编码。但是,这也意味着,除了锈迹本身之外,窗口上锈迹路径的实际内部表示实际上是无用的。

对于额外的背景,我试图用习惯的方式来包装开罗,尽管我只是在寻找一个通用的答案(因此,为什么这不是问题的一部分)。Windows上的问题是与Unicode路径交互需要通过不同的API<代码>字符*仅用于代码页。也许您至少可以使用ASCII路径,但通常在Windows上,
OsString
不是
char*
。这部分是您正在使用的C库的维护人员的问题。具体来说,在*nix平台上,但在Windows it上。啊,我明白了,所以我可以使用类似于此示例的东西:但我自己只执行写调用,对使用路径打开的文件执行写调用。