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

时间:2010-01-11 19:33:30

标签: c# .net streamreader streamwriter

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

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

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

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

6 个答案:

答案 0 :(得分:13)

使用常规文件无法解决问题 - 您必须阅读要添加的行后面的文本,覆盖文件,然后附加原始的尾随文本。

将磁盘上的文件视为数组 - 如果要将某些项插入数组的中间,则需要将所有以下项目向下移动以腾出空间。区别在于.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() );

答案 1 :(得分:5)

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

 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());

答案 2 :(得分:2)

结帐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());

答案 3 :(得分:2)

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

答案 4 :(得分:0)

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

或者您可以搜索指定字符串的索引并使用转义序列\ n

后写入

答案 5 :(得分:0)

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