-1

我有一个程序将运行很长时间(数小时),并定期将输出写入文本文件。

我正在寻找使用 TextWriter 实现来写入文件,并且我担心在整个操作期间保持文件锁定打开可能会出现问题。

第一个问题:长时间保持流对文件打开是否会出现性能问题(或其他类型)?

如果是这样,StreamWriter(使用文件名构造函数打开)是否会定期为我管理打开和关闭文件,还是会在文件存在期间保持文件打开?

最后,是否有内置选项来处理这些更长时间的写入?或者我需要一个自定义的 Writer/Stream 实现吗?

4

2 回答 2

0

就我个人而言,我会使用其中一个 File.Appendxxx 例程,它打开文件,附加数据,然后再次关闭它。

如果我的写作速度如此之快以至于所有这些打开和关闭的成本太高,那么我会添加某种基于内存的队列并定期刷新它。

如果您正在执行基于文本的日志记录,您可能会查看用于 .NET 的众多日志记录框架之一,它可以为您完成此类工作,以及旋转文件名等。

StreamWriter / FileStream 等通常会保持文件打开,直到您处理它们。

于 2016-09-14T22:31:10.430 回答
0

不建议无限期打开文件以将其写入,因为这可能会在您需要备份文件、编辑文件、读取文件时导致问题,或者即使系统在处理过程中崩溃。写入文件不可避免地会损坏数据。

威尔的回答确实提供了在需要时打开和附加文件的解决方案。这里的重点是,如果文件没有被写入 24/7,那么没有理由不关闭它。

从需要 24/7 打开文件的意义上直接回答您的问题。我会使用异步方法使用任务写入文件。这样,您就可以调用另一个任务来编写文件的备份,比如每天。备份文件将允许您查看生产文件的信息。

于 2016-09-14T23:24:09.297 回答