Первый элемент итератора Args
, возвращаемый std::env::args
, - это, как правило, путь к исполняемому файлу (см. документы для получения более подробной информации).
Ошибка возникает из-за того, что вы делаете не пропускайте первый аргумент: двоичный файл программы не является последовательностью действительных байтов UTF-8.
Кажущаяся бессмысленная ошибка thread 'main' panicked at 'Box<Any>'
заключается в том, что panic!
не используется с такими же аргументами format!
синтаксис.
use std::env;
use std::fs::File;
use std::io;
use std::io::prelude::*;
fn main() {
for filename in env::args().skip(1) {
match read_file(filename) {
Ok(content) => println!("{}", content),
Err(reason) => panic!("{}", reason),
}
}
}
fn read_file(filename: String) -> Result<String, io::Error> {
let mut content = String::new();
let mut file = File::open(filename)?;
file.read_to_string(&mut content)?;
Ok(content)
}