Ржавчина 0,9 - чтение файла?

Вот что я пытаюсь сделать: открыть все аргументы командной строки в виде (двоичных) файлов и прочитать из них байты. Постоянно меняющийся синтаксис здесь не способствует поиску в Google, но вот что я понял до сих пор:

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 ответ

Решение

Пытаться &Path::new(file_name.as_slice())

К сожалению, из-за аргумента Path::new() берет, если вы передадите ~str или же ~[u8] он будет пытаться использовать этот тип напрямую. И это то, что вы проходите с *file_name, За исключением того, что вы не можете выйти из разыменования указателя в Rust, вот почему вы получаете ошибку.

Используя file_name.as_slice() вместо этого (что в данном случае эквивалентно (*file_name).as_slice(), но Rust сделает для вас разыменование) он преобразует ~str к &str, который затем может быть передан Path::new() без проблем.

Другие вопросы по тегам