使用 .NET 在文件中间添加一行

Posted

技术标签:

【中文标题】使用 .NET 在文件中间添加一行【英文标题】:Adding a Line to the Middle of a File with .NET 【发布时间】:2011-01-03 21:37:49 【问题描述】:

您好,我正在做某事,我需要能够将文本添加到 .txt 文件中。虽然我已经完成了这个,但我有一个小问题。我需要或多或少地将字符串写在文件中间。示例:

Hello my name is Brandon,
I hope someone can help, //I want the string under this line.
Thank you.

希望有人可以提供解决方案。

编辑 好的,谢谢大家,我会试着弄清楚,可能只是重写整个文件。好吧,我正在制作的程序与主机文件有关,并不是每个人都有相同的主机文件,所以我想知道是否有办法读取他们的主机文件,并复制所有文件,同时将字符串添加到它?

【问题讨论】:

您知道StreamWriter 是.NET 的一部分,而不是C# 编程语言的一部分吗? 【参考方案1】:

对于常规文件,无法绕过它 - 您必须阅读要附加的行后面的文本,覆盖文件,然后附加原始的尾随文本。

将磁盘上的文件视为数组 - 如果您想在数组中间插入一些项目,您需要将以下所有项目向下移动以腾出空间。不同之处在于 .NET 为数组和 Lists 提供了方便的方法,使这很容易做到。据我所知,文件 I/O API 没有提供这样的便捷方法。

当您事先知道需要在文件中间插入时,通常更容易使用更改的内容编写一个新文件,然后执行重命名。 如果文件小到可以读入内存,您可以使用一些 LINQ 轻松做到这一点:

var allLines = File.ReadAllLines( filename ).ToList();
allLines.Insert( insertPos, "This is a new line..." );
File.WriteAllLines( filename, allLines.ToArray() );

【讨论】:

【参考方案2】:

这是在文本文件中间插入文本的最佳方法。

 string[] full_file = File.ReadAllLines("test.txt");
 List<string> l = new List<string>();
 l.AddRange(full_file);
 l.Insert(20, "Inserted String"); 
 File.WriteAllLines("test.txt", l.ToArray());

【讨论】:

这种方法不是最好的。到最后,每行文本都有 3 个数据结构,并且有一个中间列表插入。它效率不高,因此不能称为“最佳”。【参考方案3】:

查看File.ReadAllLines()。可能是最简单的方法。

     string[] full_file = File.ReadAllLines("test.txt");
     List<string> l = new List<string>();
     l.AddRange(full_file);
     l.Insert(20, "Inserted String");
     File.WriteAllLines("test.txt", l.ToArray());

【讨论】:

【参考方案4】:

其中一个诀窍是文件事务。首先,您将文件读取到要添加文本的行,但在读取时继续将读取的行保存在单独的文件中,例如 tmp.txt,然后将所需的文本添加到 tmp.txt(在文件末尾)之后继续从源文件读取直到结束。然后将 tmp.txt 替换为源文件。最后你得到了在中间添加文本的文件:)

【讨论】:

【参考方案5】:

如果您知道行索引,请使用 readLine 直到您到达该行并在其下写入。 如果您确切知道该行的文本,则执行相同的操作,但将 readLine 返回的文本与您正在搜索的文本进行比较,然后在该行下写入。

或者您可以搜索指定字符串的索引并使用转义序列\n写在它之后。

【讨论】:

【参考方案6】:

正如其他人所提到的,如果您必须坚持使用简单的文本文件,则无法在新插入的文本点之后重写文件。但是,根据您的要求,可能会加快寻找开始写作的位置。如果您知道需要在第 N 行之后添加数据,那么您可以为行号的偏移量维护一个单独的“索引”。这将允许您直接寻找开始读/写所需的位置。

【讨论】:

以上是关于使用 .NET 在文件中间添加一行的主要内容,如果未能解决你的问题,请参考以下文章

将中间件添加到一行/函数中的所有 firebase 函数

idea在网页添加同一对象怎么变为一行

如何使用 ASP.NET OLEDB 向数据库中添加一行?

VB.net怎么添加数据至ACCESS数据库中,并显示在DataGridview控件的第一行(注意:不是最后一行)。

EXcel怎么在表格中间增加一行,

在asp.net的html表中添加下拉列表