我应该先构建一个字符串然后写入文件吗?

时间:2011-03-02 15:37:06

标签: c# file-io

我正在处理的程序现在必须生成一个文件。我最好先将文件的内容生成为字符串,然后将该字符串写入文件,还是直接将内容添加到文件中?

一个人有什么优势吗?

文件大小约为0.5 - 1MB。

3 个答案:

答案 0 :(得分:9)

如果你随时写一个文件,你就可以不把所有内容保存在内存中,如果它是一个足够大的文件并且你经常刷新流。

但是,您更有可能遇到部分写入文件的问题,因为您在一段时间内而不是一次性完成IO。

就个人而言,我使用StringBuilder构建它,然后一次性将它全部写入磁盘。

答案 1 :(得分:2)

一般来说,我认为创建一个StreamWriter并写入它是一个更好的主意。为什么在不需要的时候把东西留在记忆里呢?而且它更容易。例如:

using (var writer = new StreamWriter("filename"))
{
    writer.WriteLine(header);
    // write all your data with Write and WriteLine,
    // taking advantage of composite formatting
}

如果要使用StringBuilder构建多行,则必须编写如下内容:

var sb = new StringBuilder();
sb.AppendLine(string.Format("{0:N0} blocks read", blocksRead));
// etc., etc.
// and finally write it to file
File.WriteAllText("filename", sb.ToString());

当然还有其他选择。您可以将这些行构建为List<string>,然后使用File.WriteAllLines。或者您可以写入StringStream然后将其写入文件。但是所有这些方法都让您多次处理数据。只需打开StreamWriter并写下来。

主要原因我认为直接输出是一个更好的想法:

  • 当输出数据太大而无法存储在内存中时,您无需重构代码。
  • 无论如何,计划目的地都是文件,所以为什么在写入文件之前在内存中格式化呢?
  • 在我看来,用于将多行写入文本文件的API比用于向StringBuilder添加行的API更清晰。

答案 2 :(得分:-1)

我认为最好使用string或stringbuilder存储数据,然后使用File.Write函数写入文件。