0

我有一个代码:

  • 读取文本文件,
  • 用“;”替换所有“空格”,
  • 删除重复的字符“;”
  • 并保存一个包含所有更改的新文件。

但不是写入文件中的所有行,而是只写入最后一行。

static void Main(string[] args)
    {
        RegexOptions options = RegexOptions.None;
        Regex regex = new Regex("[ ]{2,}", options);
        
        string FilePath = @"C:\Users\User\Desktop\download1.txt";
        string OutputhFilePath = @"C:\Users\User\Desktop\download2.txt";

        List<string> lines = new List<string>();
        lines = File.ReadAllLines(FilePath).ToList();
        
        foreach (string line in lines)
        {
            string line1 =  line.Replace(' ', ';');
            line1 = regex.Replace(line, ";");
            Console.WriteLine(line1);
            File.WriteAllText(OutputhFilePath, line1);
        }
        
            Console.ReadLine();
    }

文本文件:

代码后的文本文件:

有人可以帮我解决这些吗?提前致谢!

4

3 回答 3

3

File.WriteAllText方法可以:

创建一个新文件,将内容写入文件,然后关闭文件。如果目标文件已存在,则将其覆盖。

因此,您在读取的每一行中覆盖文件...您可以使用StringBuilder来执行此操作:

static void Main(string[] args)
{
    RegexOptions options = RegexOptions.None;
    Regex regex = new Regex("[ ]{2,}", options);
    
    string FilePath = @"C:\Users\User\Desktop\download1.txt";
    string OutputhFilePath = @"C:\Users\User\Desktop\download2.txt";

    List<string> lines = new List<string>();
    lines = File.ReadAllLines(FilePath).ToList();
    var sb = new StringBuilder();

    foreach (string line in lines)
    {
        string line1 =  line.Replace(' ', ';');
        line1 = regex.Replace(line, ";");
        Console.WriteLine(line1);
        sb.AppendLine(line1);
    }
    
    File.WriteAllText(OutputhFilePath, sb.ToString());
    Console.ReadLine();
}
于 2020-06-29T09:26:05.660 回答
1

你需要File.AppendAllText().

您正在用新的一行覆盖前一行,这就是为什么您只看到最后一个输入行的原因。

于 2020-06-29T09:25:50.307 回答
1

问题是您在每一行之后输出到文件。什么File.WriteAllText是它总是用最新数据覆盖目标文件。您需要的是附加到文件中。试试例如File.AppendText方法

然而,更好的解决方案是使用 a StringBuilder,将所有行附加到它,然后一次输出整个内容 ( builder.ToString())。这样可以避免在每一行之后过度打开和关闭文件。

于 2020-06-29T09:28:16.227 回答