【问题标题】:Programmatically empty out large text file when in use by another process当另一个进程使用时,以编程方式清空大文本文件
【发布时间】:2009-07-10 23:40:53
【问题描述】:

我正在运行一个已经运行了好几个小时的批处理作业,它生成的日志文件的大小增长得非常快,我担心磁盘空间问题。

是否有任何方法可以通过命令行或其他方式,让我可以在实用程序仍然拥有文件句柄的情况下掏空该文本文件(将其内容设置回空)?

我不想停止这项工作,我只想通过这个文件释放磁盘空间。

我在 Vista,64 位。

感谢您的帮助,

【问题讨论】:

    标签: windows command-line text


    【解决方案1】:

    嗯,这取决于工作的实际工作方式。如果它是个不错的小男孩,并且它通过管道将日志信息输出到 stdout 或 stderr,那么您可以将输出重定向到您编写的程序,然后该程序可以将内容写入磁盘并管理大小。

    如果您有权访问作业的代码,则基本上可以告诉它在每次写入(希望是追加)操作后关闭文件,然后您将有一个时间片,您可以在其中实际擦除文件。

    如果你没有任何一个,那会有点困难。如果有人拥有该文件的打开句柄,那么您无能为力,IMO,无需要求应用程序的开发人员为您找到更好的解决方案,或者只是简单地清除磁盘空间。

    【讨论】:

      【解决方案2】:

      取决于它如何写入日志文件。您不能只删除文件的开头,因为文件句柄具有下一个写入位置的偏移量。即使您刚刚删除了前 50mb,它仍会以 100mb 写入文件。

      您可以尝试重命名文件并希望它只是创建一个新文件。这通常是滚动日志的工作方式。

      【讨论】:

      • 谢谢 - 但它不允许我重命名文件,因为它说它正在被另一个进程使用
      【解决方案3】:

      您可以使用滚动日志类,它会包装常规文件类,但当文件达到最大指定大小时,会静默地寻找文件的开头。

      这是一个非常简单的封装,要么自己写,要么尝试在网上找到一个实现。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-16
        • 2012-07-25
        • 1970-01-01
        • 2020-02-27
        • 1970-01-01
        • 2012-12-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多