Rust读取文件返回错误值:多余数值来源疑问
问题:读取文件到
Vec<u8>后出现额外0-17数值的原因? 尝试将文件读取到Vec<u8>中,编写了如下Rust函数:
fn read_file(file_name: &str) -> Vec<u8> { let mut file = File::open(file_name).unwrap(); let mut contents = Vec::new(); //read file into the vec for i in 0..file.read_to_end(&mut contents).unwrap() { contents.push(i as u8); } contents }
目标文件内容为:
5 10 15 4 8 2
但读取后输出的向量为:
[53, 13, 10, 49, 48, 13, 10, 49, 53, 13, 10, 52, 13, 10, 56, 13, 10, 50, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]
想请教这些额外的0到17的数值来自哪里?
分析与解决
问题出在循环逻辑上:
file.read_to_end(&mut contents).unwrap()已经完成了文件内容到contents的读取,它的返回值是读取到的字节总数(这里是18,对应目标文件的所有字节)。- 你用这个返回值作为循环上限,遍历
0..18(Rust范围是左闭右开,实际覆盖0到17),再把每个i转成u8push到contents里,这就额外添加了0到17这18个数值。
正确写法不需要这个循环,直接返回读取后的contents即可:
use std::fs::File; use std::io::Read; fn read_file(file_name: &str) -> Vec<u8> { let mut file = File::open(file_name).unwrap(); let mut contents = Vec::new(); file.read_to_end(&mut contents).unwrap(); contents }
这样得到的Vec<u8>就只会包含文件本身的字节数据,不会有额外数值。
内容的提问来源于stack exchange,提问作者merovingian
相关产品推荐
相关产品推荐

