c# - 覆盖文本文件的第一行(c#)

标签 c# string file overwrite

我有一个自动生成的文本文件(obj 文件)。

看起来像这样:

# File generated by IfcOpenShell v0.7.0-e508fb44
g 2O2Fr$t4X7Zf8NOew3FNtn
s 1
v 0 -0.417 0
v 0 -5.55111512312578e-17 0
v 2.63496916504281 -5.55111512312578e-17 0
v 2.63496916504281 -0.417 0
v 2.63496916504281 -0.417 0
v 2.63496916504281 -5.55111512312578e-17 0
v 2.63496916504281 -5.55111512312578e-17 2.42
v 2.63496916504281 -0.417 2.42
...

我需要在文件开头插入字符串mtllib ./model_0.mtl。 由于第一行始终是注释,我想我可以像这样覆盖它。

# IfcOpenShell v0.7.0-e508fb44 生成的文件

mtllib ./model_0.mtl

问题是我不知道如何实现这一点,如何以特殊方式打开文件? 我想避免通过更改几个字符并将整个文件写出来读取整个文件..

这很相似,但似乎没有太大帮助(我正在使用 c#) Textfiles C++ Editing the very first line

最佳答案

您可以尝试使用Linq;如果文件不是那么大

using System.IO;
using System.Linq;

...

string fileName = @"c:\myFile.txt";

var newLines = new string[] {"mtllib ./model_0.mtl"} // first line
  .Concat(File
    .ReadLines(fileName) // all file
    .Skip(1))            // except the very first line
    .ToList();

File.WriteAllLines(fileName, newLines);

如果文件很大,那么.ToList() - 物化 - 不是一个好的选择,我们可以保存文件然后重命名它:

using System.IO;
using System.Linq;

...

string fileName = @"c:\myFile.txt";

var newLines = new string[] {"mtllib ./model_0.mtl"} // first line
  .Concat(File
    .ReadLines(fileName) // all file
    .Skip(1));           // except the very first line
    
// Save under different name
File.WriteAllLines(fileName + "~", newLines);

File.Move(fileName + "~", fileName, true);

关于c# - 覆盖文本文件的第一行(c#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74111800/

相关文章:

c# - 过早中止 BeginRead 和 BeginWrite 的正确方法?

java - 如何循环回到字符串的开头? super 技能,加密-解密

java - Zorba XQuery 更新工具直接修改 XML 文件

c - mmap() 总是返回 -1

c# - 是否可以将数据上下文的属性绑定(bind)到另一个数据上下文的属性

c# - 按 block 而不是逐行读取一个非常大的文件

java - 通过 hashmap 的键值逐个字母迭代字符串以获得总和

java - 使用代码构建 HTML

java - 使用 .getResource() 从 .jar 获取文件

c# - 着色器中的Unity相对方向