WriteAllText 方法 returns 最后一行,而不是文件的整行

WriteAllText method returns the last row, instead of the entire rows of the file

我有一个代码:

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

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

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

你需要 File.AppendAllText().

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

File.WriteAllText Method 做:

Creates a new file, write the contents to the file, and then closes the file. If the target file already exists, it is overwritten.

所以你在读取的每一行中覆盖文件......你可以使用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();
}

问题是您在每行之后输出到文件。 File.WriteAllText 的作用是总是用最新的数据覆盖目标文件。您需要的是附加到文件。例如尝试 File.AppendText method.

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