【发布时间】:2009-07-10 23:40:53
【问题描述】:
我正在运行一个已经运行了好几个小时的批处理作业,它生成的日志文件的大小增长得非常快,我担心磁盘空间问题。
是否有任何方法可以通过命令行或其他方式,让我可以在实用程序仍然拥有文件句柄的情况下掏空该文本文件(将其内容设置回空)?
我不想停止这项工作,我只想通过这个文件释放磁盘空间。
我在 Vista,64 位。
感谢您的帮助,
【问题讨论】:
标签: windows command-line text
我正在运行一个已经运行了好几个小时的批处理作业,它生成的日志文件的大小增长得非常快,我担心磁盘空间问题。
是否有任何方法可以通过命令行或其他方式,让我可以在实用程序仍然拥有文件句柄的情况下掏空该文本文件(将其内容设置回空)?
我不想停止这项工作,我只想通过这个文件释放磁盘空间。
我在 Vista,64 位。
感谢您的帮助,
【问题讨论】:
标签: windows command-line text
嗯,这取决于工作的实际工作方式。如果它是个不错的小男孩,并且它通过管道将日志信息输出到 stdout 或 stderr,那么您可以将输出重定向到您编写的程序,然后该程序可以将内容写入磁盘并管理大小。
如果您有权访问作业的代码,则基本上可以告诉它在每次写入(希望是追加)操作后关闭文件,然后您将有一个时间片,您可以在其中实际擦除文件。
如果你没有任何一个,那会有点困难。如果有人拥有该文件的打开句柄,那么您无能为力,IMO,无需要求应用程序的开发人员为您找到更好的解决方案,或者只是简单地清除磁盘空间。
【讨论】:
取决于它如何写入日志文件。您不能只删除文件的开头,因为文件句柄具有下一个写入位置的偏移量。即使您刚刚删除了前 50mb,它仍会以 100mb 写入文件。
您可以尝试重命名文件并希望它只是创建一个新文件。这通常是滚动日志的工作方式。
【讨论】:
您可以使用滚动日志类,它会包装常规文件类,但当文件达到最大指定大小时,会静默地寻找文件的开头。
这是一个非常简单的封装,要么自己写,要么尝试在网上找到一个实现。
【讨论】: