Ржавчина 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()
без проблем.