代码之家  ›  专栏  ›  技术社区  ›  marc esher

在Windows上连续删除超过X小时的文件的最有效方法是什么?

  •  5
  • marc esher  · 技术社区  · 16 年前

    我有一个目录,其中不断填充“artifact”文件。许多不同的程序将其临时文件转储到此目录中,这些程序不太可能很快变得自清洁。

    真的 喜欢做的是实现某种目录侦听器,它会收到添加到目录中的任何新文件的通知。然后,此侦听器会将这些文件添加到队列中,以便在以后删除。然而,似乎没有一种方法可以在我编程的语言(Java和Scala等JVM语言)中实现这样的解决方案。

    所以:我正在寻找在Windows上保持目录“尽可能干净”的最有效方法,最好是使用JVM语言。此外,虽然我从未用Powershell编程,但如果它提供这种功能,我会考虑它。最后,如果有第三方工具可以做这样的事情,我想听听。

    6 回复  |  直到 16 年前
        1
  •  4
  •   Community Mohan Dere    8 年前

    system command 按最旧的先排序: c: >目录/OD

    Timer or Executor

        2
  •  2
  •   Lanny    16 年前

    如果你不想写C++,你可以用Python。安装 pywin32 然后您就可以像这样使用win32 API了:

    import win32api, win32con
    change_handle = win32api.FindFirstChangeNotification(
        path_to_watch,
        0,
        win32con.FILE_NOTIFY_CHANGE_FILE_NAME
    )
    

    http://timgolden.me.uk/python/win32_how_do_i/watch_directory_for_changes.html .

        3
  •  2
  •   notnoop    16 年前

    Apache Commons JCI FAM 这是一个开源的java库,你可以免费使用。

    Java NIO2 tutorial .

    这两个选项都应该在Windows和Linux上工作。

        5
  •  0
  •   snemarch    16 年前

    如果你按照修改时间对这个列表进行排序,那么Sleep()的时间很容易让文件过时,而不是以某个随机的固定间隔轮询。您可能希望使用超时而不是睡眠来执行WaitForSingleObject,以便对外部更改做出反应(即,您等待变陈旧的文件已从外部删除,因此您需要唤醒并确定

    听起来像是一个有趣的写作小工具:)

        6
  •  0
  •   tvanfosson    16 年前

    你可能想咬紧牙关,用C#(或VB)编写代码。你所要求的东西得到了很好的处理 FileSystemWatcher 类。它基本上按照您描述的方式工作。在将文件添加到目录中时进行注册。有一个定期计时器,扫描文件列表中过时的文件,如果它们仍然存在,则将其删除。我可能会将其编码为在具有足够权限读取/删除目录中文件的服务id下运行的Windows服务。

    编辑 :谷歌很快就发现了这个 FileSystemWatcher for Java .商业软件。从未使用过,所以无法评论它的工作效果。