rust - 为什么Rust的read_to_end不能将文件读入缓冲区?

标签 rust file-io

代码(适应我的实际问题)非常简单,但是我无法弄清缺少的内容。它将正确写入文件。但是它的输出是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");

关于rust - 为什么Rust的read_to_end不能将文件读入缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66427132/

相关文章:

rust - 来自原始 fd 的 BufReader

io - 如果无法查找标准输入,我如何从标准输入或文件获取输入?

java - 在java中将数据从标准输出写入文本文件不起作用

c - 使用 malloc 和 POSIX 文件操作将文件读入动态内存数组

android - 在 Android 上执行文件 I/O - 它属于哪个线程

reference - 在引用上泛化迭代器,在值上泛化迭代器

rust - 比较切片和生命周期

json - 如何在没有中间结构的情况下有效地将 JSON 的一部分提取为 Vec?

c - 如何从特定位置读取文件或从特定位置读取文件?

c# - 如何处理 ASP.NET 应用程序中的临时文件