在文本文件中附加新行的最佳变体是什么?

2024-02-19

我使用此代码将新行附加到文件末尾:

let text = "New line".to_string();

let mut option = OpenOptions::new();
option.read(true);
option.write(true);
option.create(true);

match option.open("foo.txt") {
    Err(e) => {
        println!("Error");
    }
    Ok(mut f) => {
        println!("File opened");
        let size = f.seek(SeekFrom::End(0)).unwrap();
        let n_text = match size {
            0 => text.clone(),
            _ => format!("\n{}", text),
        };
        match f.write_all(n_text.as_bytes()) {
            Err(e) => {
                println!("Write error");
            }
            Ok(_) => {
                println!("Write success");
            }
        }

        f.sync_all();
    }
}

它有效,但我认为这太难了。我发现option.append(true);,但如果我用它代替option.write(true);我收到“写入错误”。


Using OpenOptions::append http://doc.rust-lang.org/std/fs/struct.OpenOptions.html#method.append是附加到文件的最清晰的方法:

use std::fs::OpenOptions;
use std::io::prelude::*;

fn main() {
    let mut file = OpenOptions::new()
        .write(true)
        .append(true)
        .open("my-file")
        .unwrap();

    if let Err(e) = writeln!(file, "A new line!") {
        eprintln!("Couldn't write to file: {}", e);
    }
}

从 Rust 1.8.0 开始(commit https://github.com/rust-lang/rust/commit/42f4dd047af2de895df2754f7222b39f10cb6205) and RFC 1252 https://github.com/rust-lang/rfcs/blob/master/text/1252-open-options.md, append(true)暗示write(true)。这应该不再是问题了。

Rust 1.8.0之前,必须使用both write and append— 第一个允许您将字节写入文件,第二个指定字节将写入的位置。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在文本文件中附加新行的最佳变体是什么? 的相关文章

随机推荐

  • MongoDB Java 客户端在“replaceOne”上将“_id”存储为 null

    我们已经升级 从 2 11 1 到
  • Visual Studio - 如何在发布模式下删除引用

    我正在开发一个用于其他应用程序的库 并且由于 NLog 该库具有大量调试和日志记录语句 当我切换到发布模式时是否可以排除对 NLog dll 的引用 Cheers 您可以手动编辑 csproj 文件 并执行如下操作
  • Cassandra 错误 - 无法限制聚类列(前一列受非 EQ 关系限制)

    我们使用 Cassandra 作为车队管理解决方案的数据历史记录 我们在 Cassandra 中有一张表 用于存储车辆行程的详细信息 表结构如下 CREATE TABLE journeydetails bucketid text vehic
  • 使用 Javascript 隐藏 iPhone 的键盘

    有谁知道如何hide用户触摸按钮 开始 而不是 完成 后 iPhone 在 Safari 中的键盘 我需要 Javascript 和 HTML5 的解决方案 使用 jQuery 您应该取消单击按钮的输入焦点 button id clicke
  • Python 3.9 和 3.10 之间 level=0 的 zlib 大小差异

    在这段代码中 使用 zlib 对一些数据进行编码 但 level 0 因此它实际上并未被压缩 import zlib print zlib ZLIB VERSION zlib ZLIB VERSION total 0 print Total
  • 使用 Mockito 模拟具有泛型参数的类

    是否有一种干净的方法来模拟带有泛型参数的类 假设我必须模拟一堂课Foo
  • 如何在 TypeScript 中删除数组项?

    我有一个在 TypeScript 中创建的数组 它有一个用作键的属性 如果我有该密钥 我如何从中删除项目 与 JavaScript 中的方式相同 delete myArray key 请注意 这将元素设置为undefined 更好地使用Ar
  • 如何正确使用drawMyLocation

    我试图用 android 中的默认蓝点向用户显示当前位置 在我的地图页面中 我还有一个显示不同兴趣点的布局 我无法弄清楚要为某些变量添加什么 并且想知道是否有人可以帮助我 这就是我到目前为止用来显示我的位置的方法 Location loca
  • 从完成处理程序返回值 - Swift

    我在实用程序类中使用 loadImage 方法 并且在通过闭包返回图像时遇到一些问题 基本上因为我的代码可能返回图像或错误 所以在调用方法时将其分配给图像属性将不起作用 我在类的方法声明中使用的方法是否错误 或者我应该以不同的方式调用该方法
  • 我的 ffmpeg 输出总是在最后添加额外的 30 秒静音

    这是我用来将 1 个音频和 1 个图像合并为 1 个视频的代码 参数 由于某种原因 无论来源如何 它都会在输出视频的末尾添加 30 秒的静音 我在 Win10 x64 上运行它 安装了最新的 ffmpeg 我检查了代码 但无法确定它在哪里造
  • 自动在句点和逗号后添加空格,同时避免数字

    这是当前的正则表达式 当人们写下以下内容时 我用它来清理句子 你好 我是安德烈斯 对吗 它将自动转换为 你好 我是安德烈斯 对吧 当字符串中有数字时就会出现问题 例子 我有 40 381 32 美元 将转换为 我有 40 381 32 美元
  • 无法找到资源

    我不确切知道这是否是一个错误 但我一直收到运行时 IOException 错误 指出无法找到资源 我正在画布背景中的应用程序 c WPF 中加载一些图像 具体取决于数据库状态 问题是 我无法加载最后一个 按字母顺序排序 文件 例如 我的文件
  • iOS - 缩放和裁剪 CMSampleBufferRef/CVImageBufferRef

    我正在使用 AVFoundation 并从中获取示例缓冲区AVCaptureVideoDataOutput 我可以使用以下方法将其直接写入 videoWriter void writeBufferFrame CMSampleBufferRe
  • Java:获取打印机状态(缺纸/缺纸)

    我是这样打印的 FileWriter imp new FileWriter COM2 while linea br readLine null imp write linea imp write 0x0A 现在我使用端口 COM2 我有一台
  • Unidata 数据库导出 - 如何使用 TO DELIM 添加标题

    在 Unidata 中 将查询转储到分隔文件时 例如 列出 MYFILE 1000 ATB1 ATB2 ATB3 至 DELIM tmp extract txt 是否有任何 UDT OPTIONS 控制是否写入标题行 当前唯一的解决方法涉及
  • 从子线程停止主线程

    我正在编写一个python程序 在主函数中我正在启动一个连续运行的线程 启动线程后 主函数进入 while 循环 连续获取用户输入 如果子线程中出现异常 我也想结束主函数 最好的方法是什么 提前致谢 让线程 控制 其父级并不是一个好的做法
  • 排除日期晚于今天的项目

    我有一个关于 XSLT 的问题 在一个网站上 我有一个简单的日历 显示未来将要发生的事件 但当一个事件完成后 它应该从我的列表中删除 我所说的 完成 是指活动的日期已经过了今天 每个事件都附有日期 看下面的代码
  • 故意依赖 Linq Side Effects 是不好的做法吗?

    像这样的编程模式经常出现 int staleCount 0 fileUpdatesGridView DataSource MultiMerger TargetIds Select id gt FileDatabaseMerger merge
  • 使用 listpreference 并获取密钥有效,但没有“确定”按钮

    我在我的 android 应用程序中使用 listpreference 并获取我的键值 一切都很好并且工作正常 现在你们已经帮助了我 但是 当我的 listpreference 菜单弹出时 它们只包含一个取消按钮 假设用户正在红色 蓝色和绿
  • 在文本文件中附加新行的最佳变体是什么?

    我使用此代码将新行附加到文件末尾 let text New line to string let mut option OpenOptions new option read true option write true option cr