如何在文本文件中上下移动项目

时间:2012-04-30 14:27:40

标签: c# .net visual-studio

如何在文本文件中上下移动项目/值。目前我的程序读取文本文件,使用一段时间确保在没有更多行要读取时停止。我使用if语句来检查counter是否等于我想要移动的值的行。我不知道如何从这里继续。

  _upORDown = 1; 

    using (StreamReader reader = new StreamReader("textfile.txt"))
    {
        string line = reader.ReadLine();
        int Counter = 1;
        while (line != null)
        {

            if (Counter == _upORDown)
            {
              //Remove item/replace position

            }
            Counter++;
        }
    }

2 个答案:

答案 0 :(得分:3)

您可以在内存中读取文件,将行移动到您需要的位置,然后将文件写回。您可以使用ReadAllLinesWriteAllLines

此代码将位置i的字符串向上移动一行:

if (i == 0) return; // Cannot move up line 0
string path = "c:\\temp\\myfile.txt";
// get the lines
string[] lines = File.ReadAllLines(path);
if (lines.Length <= i) return; // You need at least i lines
// Move the line i up by one
string tmp = lines[i];
lines[i] = lines[i-1];
lines[i-1] = tmp;
// Write the file back
File.WriteAllLines(path, lines);

答案 1 :(得分:0)

@dasblinkenlight的答案,使用LINQ:

string path = "c:\\temp\\myfile.txt";
var lines = File.ReadAllLines(path);
File.WriteAllLines(
    path,
    lines.Take(i).Concat(
        lines.Skip(i+1)
    )
);

这将删除位置i的行(从零开始)并向上移动其他行。

添加到新行:

string path = "c:\\temp\\myfile.txt";
var lines = File.ReadAllLines(path);
var newline = "New line here";
File.WriteAllLines(
    path,
    lines.Take(i).Concat(
        new [] {newline}
    ).Concat(
        lines.Skip(i+1)
    )
);