Rust 0.9 - 读取文件?

时间:2014-01-10 16:45:43

标签: rust rust-0.9

这就是我要做的事情:将所有命令行参数打开为(二进制)文件并从中读取字节。这里不断变化的语法不会影响谷歌搜索,但这是我到目前为止所发现的:

use std::io::{File, result};
use std::path::Path;
use std::os;

fn main() {
    let args = os::args();
    let mut iter = args.iter().skip(1); // skip the program name

    for file_name in iter {
        println(*file_name);
        let path = &Path::new(*file_name);
        let file = File::open(path);
    }
}

问题在于:

test.rs:44:31: 44:41 error: cannot move out of dereference of & pointer
test.rs:44         let path = &Path::new(*file_name);

我在这里碰到了一堵砖墙,因为虽然我对C中的指针很好,但我对生锈中不同指针类型的理解几乎不存在。我能在这做什么?

1 个答案:

答案 0 :(得分:4)

尝试&Path::new(file_name.as_slice())

不幸的是,由于Path::new()所采用的特征论证,如果您将~str~[u8]传递给它,它会尝试直接使用该类型。这就是你用*file_name传递的内容。除非你不能在Rust中移出指针取消引用,这就是你得到错误的原因。

使用file_name.as_slice()代替(在这种情况下,相当于(*file_name).as_slice(),但Rust会为您执行解引用)它会将~str转换为{{1}然后可以毫无问题地将其传递给&str