< 返回版块

ltoddy 发表于 2020-04-29 20:42

Tags:rust-io

例如, 用Rust往一个文件里面写入东西, 最简单的:

use std::fs::OpenOptions;
use std::io::{Result, Write};

fn main() -> Result<()> {
    let mut fp = OpenOptions::new()
        .write(true)
        .create(true)
        .open("foo.txt")?;

    fp.write_all(b"hello world")
}

那么, 如何做删除文件内容操作呢.

例如: cargo run 之后, 文件内容由hello world 变成world.

评论区

写评论
ywxt 2020-05-06 17:07

你得自己对文件进行分析。 文本编辑器的基本思想是把文本分成许多小块,更改时修改对应的块内容,最后拼接起来输出。

作者 ltoddy 2020-04-30 19:06

要不这样, 你写个demo, 我叫你一声爸爸。

use std::fs::OpenOptions;
use std::io;
use std::io::{Read, Write};

fn main() -> io::Result<()> {
    {
        let mut file = OpenOptions::new()
            .write(true)
            .create(true)
            .open("foo.txt")?;

        file.write(b"hello world")?;

        // file.remove_content("o w")?;  Here, complete removal of the specified content in the file, pls.
    }

    {
        let mut file = OpenOptions::new().read(true).open("foo.txt")?;
        let mut s = String::new();
        file.read_to_string(&mut s)?;
        println!("file content {:?}", s); // => file content "hellorld"
    }
    Ok(())
}

我给你填了个模板, 请帮忙把注释的那行实现一下可以吗? (需要考虑到的是,如果文件内容很多很多呢.)

对以下内容的回复:

Mike Tang 2020-04-30 14:11

拒绝伸手党

作者 ltoddy 2020-04-30 13:28

能不能写几行代码, 给我看看呢?

对以下内容的回复:

Mike Tang 2020-04-30 12:42

编辑器就是这样干的。

既然是编程小白,欢迎入手 Rust,一劳永逸。

作者 ltoddy 2020-04-30 12:28

那比如说, 我们的编辑器, 打开之后, 你删除一点东西, 保存, 难道也要重写?

对以下内容的回复:

按你这个说法, 如果我有很大的文件, 就拿数据库的存储文件来说吧, 难道删除一条记录还要先全部读出来, 然后重新写?

Ryan-Git 2020-04-30 10:55

不需要,数据库有很多方式做这个事情。基本的想法是写一条这一行被删除了的记录,之后再合并。 裸文件确实只能这样。题目补一补计算机基础。。。

对以下内容的回复:

按你这个说法, 如果我有很大的文件, 就拿数据库的存储文件来说吧, 难道删除一条记录还要先全部读出来, 然后重新写?

作者 ltoddy 2020-04-30 10:12

对以下内容的回复:

按你这个说法, 如果我有很大的文件, 就拿数据库的存储文件来说吧, 难道删除一条记录还要先全部读出来, 然后重新写?

Mike Tang 2020-04-30 09:04

全部读出来,删除,再全部重头写进去。

再问的话,就得补补计算机文件操作基本知识了。

作者 ltoddy 2020-04-30 07:20

比如, 我有一个文件, 内容为: "1 2 3 4 5", 我想删除 "3", 怎么做呢?

作者 ltoddy 2020-04-30 07:18

对以下内容的回复:

比如, 我有一个文件, 有一百行, 我想删除里面的几行, 这该怎么做呢? (别看我给的实例代码啊, 那个仅作为聊天的时候钩出话题用的.

93996817 2020-04-29 23:55
let mut fp = OpenOptions::new()
    .write(true)
    .create(true)
    .truncate(true) //从头开始写 不知道是不是问的这个?
    .open("foo.txt")?;

fp.write_all(b"hello")
作者 ltoddy 2020-04-29 21:31

对以下内容的回复:

能否写几行示例代码?(因为我别的语言怎么做的, 我也不知道...

Mike Tang 2020-04-29 21:04

跟其它语言文件操作一样的,seek 了解一下。

https://doc.rust-lang.org/std/fs/struct.File.html#method.seek

1 共 14 条评论, 1 页