C#逐行检查文件

teq*_*ras 0 c# file-io line-by-line

我正在逐行读取文件,我想编辑我读过的一些行.我想编辑的行必须在它们上面或下面有一些其他特定行,但我不知道如何在C#中表达.例如:

http://www.youtube.com
You Tube | Music | something
Sports
Music
Radio
Clips
http://www.youtube.com/EDIT ME   
Sports
Music
Radio
Clips
Run Code Online (Sandbox Code Playgroud)

我想只在下一行编辑一行

Sports 
Run Code Online (Sandbox Code Playgroud)

而上一行是

Clips
Run Code Online (Sandbox Code Playgroud)

所以我想从上面的例子中编辑的唯一一行是

http://www.youtube.com/EDIT ME 
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Jon*_*eet 6

你无法逐行"编辑"文件.最好采用以下两种方法之一:

  • 将整个文件读入内存,例如使用File.ReadAllLines,然后在内存中进行适当的更改并重写整个内容(例如使用File.WriteAllLines)
  • 同时打开输入文件和输出文件.一次读一行,找出它在输出文件中应该对应的内容,然后写入该行.

第一个版本更简单,但显然需要更多内存.如你所说,如果你需要查看下一行和上一行,这一点尤其棘手.

第一种方法的简单示例:

string[] lines = File.ReadAllLines("foo.txt");
for (int i = 1; i < lines.Length - 1; i++)
{
    if (lines[i - 1] == "Clips" && lines[i + 1] == "Sports")
    {
        lines[i] = "Changed";
    }
}
File.WriteAllLines("foo.txt", lines);
Run Code Online (Sandbox Code Playgroud)