【发布时间】:2011-06-28 23:31:28
【问题描述】:
在 C# 中,我正在读取中等大小的文件(100 KB ~ 1 MB),修改部分内容,最后写入不同的文件。所有内容均为文字。修改是作为字符串对象和字符串操作完成的。我目前的做法是:
- 使用
StreamReader从原始文件中读取每一行。 - 打开
StringBuilder以获取新文件的内容。 - 修改字符串对象,调用
StringBuilder的AppendLine(直到文件结束) - 打开一个新的
StreamWriter,并将StringBuilder写入写入流。
但是,我发现 StremWriter.Write 会截断 32768 个字节 (2^16),但 StringBuilder 的长度大于此。我可以编写一个简单的循环来保证整个字符串到一个文件中。但是,我想知道在 C# 中执行此任务最有效的方法是什么?
总而言之,我只想修改文本文件的某些部分并写入不同的文件。但是,文本文件的大小可能大于 32768 字节。
== 回答 == 很抱歉让你迷惑了!只是我没有打电话给flush。 StremWriter.Write 没有短的(例如 2^16)限制。
【问题讨论】:
-
我认为使用字符串生成器是更好的方法
-
你是刷新还是关闭你的 StreamWriter?
-
Flush 将在您关闭编写器时自动调用(您确实应该这样做)。要关闭编写器,您应该调用 Dispose 而不是 Close,以便释放非托管资源。最好的方法是使用 using 语句。
-
那么...修复仍然是调用 Flush,还是有其他工作?有sn-p吗?我在 HttpModule 中遇到了同样的问题。
-
没关系...我刚试过。成功了!