使用C#更改文件中行结尾的最有效方法是什么?

时间:2013-11-20 19:23:08

标签: c# file-io

我有一个程序X,它接收带有\r\n ({CR}{LF})行结尾的文件。当提供带有unix文件结尾\n ({LF})

的文件时,程序会中断

我想创建一个适配器来处理输入文件,并为程序X提供带有Windows行结尾的输出文件。

我尝试了什么

  1. 使用StreamReader
  2. 读取输入文件
  3. 使用StreamWriter将每一行写入临时文件
  4. 删除原始文件
  5. 将临时文件复制为原始文件
  6. 删除临时文件
  7. 代码:

    public void ShouldConvertFile()
    {
        using (var reader = 
               new StreamReader(new FileStream(SampleFileName, FileMode.Open)))
        {
            if (File.Exists(SampleTemporaryFileName))
                File.Delete(SampleTemporaryFileName);
    
            using (var writer = new StreamWriter(
                      new FileStream(SampleTemporaryFileName, FileMode.Create)))
            {
                string line;
                while ((line = reader.ReadLine()) != null)
                    writer.WriteLine(line);
            }
        }
    
        if (File.Exists(SampleFileName))
            File.Delete(SampleFileName);
    
        File.Copy(SampleTemporaryFileName, SampleFileName);
        File.Delete(SampleTemporaryFileName);
    }
    

    是否有更快/更好/更清洁的方法可以实现这一目标?

2 个答案:

答案 0 :(得分:7)

清洁?也许这个:

File.WriteAllLines("output.txt", File.ReadLines("input.txt"));

可能没有明显更快或更慢。

答案 1 :(得分:0)

File.WriteAllLines("output.txt", File.ReadLines("input.txt"));

清洁?也许......更多的RAM使用?肯定 - 这段代码可以适用于大文件(首先执行ReadLines,一次读取整个文件!).... (会发表评论,但出于某种原因不能)

此致 约翰内斯

P.S。:对不起 - 我错了! ReadLines和WriteAllLines在IEnumerable上工作 - 因此懒惰......

P.P.S。:如果您使用的是< = .Net 3.5(在我为我们工作的公司),我的陈述是正确的,并且不应使用单行。