string - 如何在 Rust 中删除文本文件的第一行?

标签 string file rust

我有一个 ./file.txt 是:

Lorem ipsum
dolor sit
amet

我希望相同的 ./file.txt 是:

dolor sit
amet

我不关心任何其他方式的文件;我不会对它做任何进一步的操作或类似的事情。我只想去掉第一行。


std::fs::write 覆盖文件的全部内容。我假设我需要将整个文件读入一个字符串,从字符串的开头删除所有内容,直到找到一个新行(以某种方式),然后用该新字符串覆盖整个文件。虽然也许只有我一个人,但所有这些都感觉有点矫枉过正。我不关心文件的全部内容。

我问的原因是因为我根本不知道该怎么做,尤其是如果有更好的方法来处理这整件事的话。如果有一个明显简单的答案那就太好了。

This question已回答 Rust 1.0,它已经过时,以至于 BufReader.lines() 不再存在。

最佳答案

做了更多研究,这是我最终得到的最接近的结果。

我不知道这是否是最优的,并且我不完全确定这会保留文件的格式(尽管我认为它会保留)。我也认为可能有更好的加载文件的方法。我不知道很多事情。

但它有效吗?

use std::{fs, fs::File, fs::OpenOptions};
use std::io::{BufReader, BufRead, Write};

fn main() {
    let mut file = OpenOptions::new()
        .read(true)
        .write(true)
        .open("./file.txt")
        .expect("file.txt doesn't exist or so");

    let mut lines = BufReader::new(file).lines().skip(1)
        .map(|x| x.unwrap())
        .collect::<Vec<String>>().join("\n");

    fs::write("./file.txt", lines).expect("Can't write");
}

关于string - 如何在 Rust 中删除文本文件的第一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62762204/

相关文章:

java - 文本文件中的微型 GP 输出

XML 架构文件 (.xsd) 在 Linux 和 Windows 上具有不同的大小

rust - 从 MPSC channel 成功接收后进程永不退出

rust - 不能借用为不可变的,因为它在函数参数中也被借用为可变的

java - 是否有 O(N) 解决方案来获取 List<String> 中出现次数最多的前 k 个字符串?

string - Haskell 中的内存高效字符串

c - 为什么下面的 C 语言代码会给出这样的输出?

C++ 将字符串写入文本文件中的一行;换行问题\n 不工作

compiler-errors - 将 OsString 传递给 func<T : ToString>, 的误导性错误 Display 特征从何而来?

java - 删除字符串中的制表符