是否可以使用相同的文件进行读写?

时间:2017-12-23 22:48:26

标签: rust

我正在尝试使用相同的std::fs::File对象进行写入和读取,但是读取会返回一个空字符串。

我尝试flushsync_allseek,但没有任何帮助。使用新的File对象,我可以轻松读取文件。

use std::io::{Read, Seek, Write};

const FILE_PATH: &str = "test.txt";

fn main() {
    // Create file
    let mut f = std::fs::File::create(FILE_PATH).unwrap();
    f.write_all("foo bar".as_bytes());
    f.seek(std::io::SeekFrom::Start(0));

    // Read from the same descriptor
    let mut content = String::new();
    f.read_to_string(&mut content);
    println!("{:?}", content); // -> ""

    // Read from the other descriptor
    let mut f = std::fs::File::open(FILE_PATH).unwrap();
    let mut content = String::new();
    f.read_to_string(&mut content);
    println!("{:?}", content); // -> "foo bar"
}

1 个答案:

答案 0 :(得分:4)

问题在于File::create - opens a file in write-only mode。解决方法是使用std::fs::OpenOptions

let mut f = std::fs::OpenOptions::new()
    .create(true)
    .write(true)
    .read(true)
    .open(FILE_PATH)
    .unwrap();

不要忘记使用seek重置阅读位置。