为什么 Rust 的 read_to_end 不将文件读入缓冲区?
Why does Rust's read_to_end not read a file into a buffer?
代码(改编自我的实际问题)非常简单,但我无法弄清楚我遗漏了什么。它将正确写入文件。但它的输出是 Buffer: []
,由于某种原因没有从文件中读取任何内容。这是什么?
use std::io::{Read, Write};
fn main() {
let mut test_file = std::fs::OpenOptions::new()
.read(true)
.write(true)
.open("testfile.txt")
.expect("Creating file failed");
let test_str = String::from("This is only a test!");
test_file
.write_all(test_str.as_bytes())
.expect("Writing file failed");
let mut buffer: Vec<u8> = Vec::new();
test_file
.read_to_end(&mut buffer)
.expect("Reading file to buffer failed!");
println!("Buffer: {:?}", &buffer);
}
读取和写入文件发生在当前光标位置。打开文件时,光标从 0 开始,但写入后,它将位于您刚刚写入的数据的末尾。您可以使用 seek
:
移动光标
use std::io::{Seek as _, SeekFrom};
test_file.seek(SeekFrom::Start(0)).expect("Failed to seek");
代码(改编自我的实际问题)非常简单,但我无法弄清楚我遗漏了什么。它将正确写入文件。但它的输出是 Buffer: []
,由于某种原因没有从文件中读取任何内容。这是什么?
use std::io::{Read, Write};
fn main() {
let mut test_file = std::fs::OpenOptions::new()
.read(true)
.write(true)
.open("testfile.txt")
.expect("Creating file failed");
let test_str = String::from("This is only a test!");
test_file
.write_all(test_str.as_bytes())
.expect("Writing file failed");
let mut buffer: Vec<u8> = Vec::new();
test_file
.read_to_end(&mut buffer)
.expect("Reading file to buffer failed!");
println!("Buffer: {:?}", &buffer);
}
读取和写入文件发生在当前光标位置。打开文件时,光标从 0 开始,但写入后,它将位于您刚刚写入的数据的末尾。您可以使用 seek
:
use std::io::{Seek as _, SeekFrom};
test_file.seek(SeekFrom::Start(0)).expect("Failed to seek");