我有一个自动生成的文本文件(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/