1

这是我迄今为止看到的删除文本文件中最后 3 行的代码,但需要确定 string[] lines = File.ReadAllLines(); 我没有必要这样做。

string[] lines = File.ReadAllLines(@"C:\\Users.txt");
            StringBuilder sb = new StringBuilder();
            int count = lines.Length - 3; // except last 3 lines 
            for (int s = 0; s < count; s++)
            {
                sb.AppendLine(lines[s]);

            }

代码运行良好,但我不想重新读取文件,因为我在上面提到了流读取器:

using (StreamReader r = new StreamReader(@"C:\\Users.txt"))

据我所知,我是 C# 的新手,在使用 streamreader 之后,如果我想修改这些行,我必须使用这个:

while ((line = r.ReadLine()) != null)
{
#sample codes inside the bracket
                    line = line.Replace("|", "");
                    line = line.Replace("MY30", "");
                    line = line.Replace("E", "");
}

那么,有没有办法删除“while((line = r.ReadLine())!= null)”中文件中的最后3行?

我必须一次删除行、替换行和更多修改,所以我不能一次又一次地打开/读取同一个文本文件来修改行。我希望我问的方式对你们来说是不稳定的>.<

请帮助我,我知道这个问题听起来很简单,但我已经搜索了很多方法来解决它但失败了=(

到目前为止,我的代码是:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ConsoleApplication11
{
public class Read
{

    static void Main(string[] args)
    {

        string tempFile = Path.GetTempFileName();
        using (StreamReader r = new StreamReader(@"C:\\Users\SAP Report.txt"))
        {
            using (StreamWriter sw = new StreamWrite (@"C:\\Users\output2.txt"))
            {
                string line;

                while ((line = r.ReadLine()) != null)
                {
                    line = line.Replace("|", "");
                    line = line.Replace("MY30", "");
                    line = line.Replace("E", "");

                    line = System.Text.RegularExpressions.Regex.Replace(line, @"\s{2,}", " ");

                    sw.WriteLine(line);
                }
     }
            }
        }
    }
}

现在我的下一个任务是删除这些代码之后文件中的最后 3 行,我需要这方面的帮助。

谢谢你。

4

3 回答 3

3

使用File.ReadAllLines您已经读取了文件,因此您可以处理string[]中的每一行(替换和正则表达式),然后将它们写入输出。您不必重新阅读它们并将它们放入StringBuilder

于 2012-07-03T09:12:01.870 回答
1

您可以保留前三行的“滚动窗口”:

string[] previousLines = new string[3];
int index = 0;
string line;
while ((line = reader.ReadLine()) != null)
{
    if (previousLines[index] != null)
    {
        sw.WriteLine(previousLines[index]);
    }
    line = line.Replace("|", "")
               .Replace("MY30", "")
               .Replace("E", "");
    line = Regex.Replace(line, @"\s{2,}", " ");
    previousLines[index] = line;
    index = (index + 1) % previousLines.Length;
}
于 2012-07-03T09:11:05.683 回答
1

您可以保留行列表并在以后加入它们,而不是将行直接附加到字符串构建器。这样你就可以轻松地省略最后三行。

为了减少您必须在列表中保留的行数,您可以定期附加列表中的一行并将其从中删除。因此,您将在数组中保留 3 行的缓冲区,并在缓冲区包含 4 行时弹出并追加一行。

于 2012-07-03T09:14:13.123 回答