如何将所有文件刷新到硬盘驱动器,即使 WinRAR 也可以将它们存档?
Posted
技术标签:
【中文标题】如何将所有文件刷新到硬盘驱动器,即使 WinRAR 也可以将它们存档?【英文标题】:How to flush all files to hard drive so even WinRAR can archive them? 【发布时间】:2014-09-30 10:13:45 【问题描述】:我想将所有缓存的文件(尤其是日志)刷新到硬盘。当我的软件出现错误时,我希望拥有完整的日志文件并收集它们以进行调试。
我正在使用WinRAR来收集它们。(你可以用记事本打开缓存的文件,但WinRar由于某种原因找不到它们)但是当出现错误并尝试全部rar时对于调试感兴趣的文件,它无法收集仍然打开以进行追加的最后一个日志文件。
我知道我可以为那个文件使用FlushFileBuffers
。但是,如果我有一些文件和其他文件 and and and 怎么办?还有另一种方法来完成文件写入吗?如果时间太长也没关系。以防出现错误/紧急情况。
编辑:
还有一些图像会在出现错误时保存到 *.bmp。 我使用File.AppendText(...)
记录日志。
另一个编辑:
要 rar 我最新的日志文件(为我解决),请参阅接受的答案 要刷新 所有 文件以便 WinRar 能够存档,我可能必须确保所有这些文件都已关闭以执行此操作。解决方案:
关闭打开的文件(工作) 将 WinRar 与开关-dh
一起使用(未验证)
【问题讨论】:
文件怎么写?如果你使用StreamWriter
,你可以使用Flush
方法。
@SriramSakthivel File.AppendText()
用于日志。
您需要关闭文件而不是刷新它们
@DavidHeffernan 是的,我也注意到了这一点。当我关闭它时,WinRar 会获取日志文件。我只是以“易失风格”使用日志记录(随时从任何线程写入日志文件)。但不能接受 cmets。
WinRAR 还有-dh
开关,它可以归档当前由应用程序打开以进行写入的文件。此处不应使用它,因为在归档之前关闭每个日志文件总是更好,因为这会将文件流缓冲区刷新到存储介质。但我仍然想增加这种可能性。请注意,即使使用开关-dh
也必须可以读取文件。有关-dh
的更多详细信息,请查看 WinRAR 程序文件夹或 WinRAR 帮助中的Rar.txt
。
【参考方案1】:
问题不在于您需要冲洗。刷新是将缓存或缓冲数据推送到其真实存储位置的过程。在这种情况下磁盘。
但您的问题是文件以阻止 WinRAR 将文件添加到存档的共享模式打开。因此,您的问题的解决方案是关闭文件并执行归档。
【讨论】:
【参考方案2】:我不知道你的文件操作的具体实现,但你可以从IDisposable
接口继承你的记录器和其他“写入文件”的东西。这将要求您实现 Dispose
方法,每次对象破坏时都必须调用该方法。在 Dispose
方法中,您必须执行将数据刷新到文件所需的所有工作。
【讨论】:
以上是关于如何将所有文件刷新到硬盘驱动器,即使 WinRAR 也可以将它们存档?的主要内容,如果未能解决你的问题,请参考以下文章
如何在exe中执行bat文件? (使用 WinRAR sfx 创建的 exe)