我希望在每个人都可以访问的 Windows 共享驱动器中创建一个“放置文件夹”。如果文件在文件夹中停留超过 X 天,我希望文件被自动删除。
但是,似乎我发现的所有方法都可以使用文件的最后修改日期、最后访问时间或创建日期。
我正在尝试将此文件夹设置为用户可以将文件放入其中以与某人共享的文件夹。如果有人将文件复制或移动到这里,我希望时钟在此时开始滴答作响。但是,除非有人实际修改了文件,否则不会更新文件的最后修改日期和创建日期。最后一次访问时间更新太频繁了……看来只要在windows资源管理器中打开一个目录就会更新最后一次访问时间。
有谁知道解决这个问题?我认为每天对文件的哈希进行编目,然后根据某个日期之前的哈希使文件过期可能是一种解决方案……但是获取文件的哈希可能会很耗时。
任何想法将不胜感激!
注意:
我已经在这里查看了很多答案...查看了文件服务器资源监视器、powershell 脚本、批处理脚本等。它们仍然使用上次访问时间、上次修改时间或创建时间...如上所述,它不符合上述需求。
我们使用了 powershell 脚本和策略的组合。该策略指定用户必须在 Drop_Zone 共享中创建一个文件夹,然后将他们想要的任何文件复制到该文件夹中。当文件夹存在 7 天(使用 CreationTime)时,powershell 脚本将删除它。
我还在 powershell 脚本中添加了一些日志记录,这样我们就可以验证它的操作并打开卷影副本,只是为了让自己完全无能。
这是没有所有日志记录的脚本。
如果您可以假设 NTFS,您可以将密钥 (Guid) 写入文件的备用流。加上日期,因此您基本上可以将数据库存储在文件中。
更多信息可以在
http://blogs.technet.com/b/askcore/archive/2013/03/24/alternate-data-streams-in-ntfs.aspx
基本上,您可以将附加内容存储在由特殊名称编码的单独流中。
您可以使用 IO.FileSystemWatcher,它允许您“监视”文件夹中创建的新文件。这是完成这项工作所需的部分。
这些变量配置要监视的路径和过滤器以微调要跟踪的文件:
这会设置要监视的文件夹的参数以及事件发生时要执行的操作。基本上,这会在每个文件写入时重置 LastWriteTime:
如果需要,可以使用以下方法取消注册该事件:
最后,您可以每天运行一次以清理旧文件:
这应该是你需要的一切......
已经有一段时间了,但我设置了一个相对简单的方法来解决这个问题。
我会触摸添加到放置目录的任何文件(通过资源监视实用程序监视)并将最后修改日期设置为添加到文件夹的日期。
然后我可以使用最后修改日期来清除任何需要老化的文件。这还有一个好处是,如果有人真的更新了文件,它将重置倒计时。
无法依赖文件被复制或移动到文件夹中的日期。Windows 设法跨文件系统、驱动器、网络共享等保存它。您可以使用 linux 文件服务器解决问题,或者防止人们使用 FTP 或基于 Web 的上传系统直接复制文件。
如果您对人们在上传后无法修改文件感到满意,您可以拥有单独的上传和访问文件夹,以及在它们之间移动文件并重新日期的脚本。但听起来您希望人们能够直接修改文件。
所以一个简单的,如果有点hacky,解决方案就是弄乱日期。我会写两个脚本:
每小时换日脚本
以您的首选语言每小时运行一次左右的脚本:
在 powershell 中,它看起来像这样:
今天(5 月 27 日)运行此脚本,将所有文件的修改日期设置为 1994 年 6 月 1 日 - 正好是 356*20 天前。因为它只更改比 $before 值更新的文件,所以它不会触及它已经设置为过去的文件。
清理脚本
清理脚本将每晚运行,并且:
我不会为这部分编写脚本 - 有很多实用程序可以处理删除早于指定日期的文件,选择你喜欢的。重要的部分是查找 7300+X 天前的文件,其中 X 是自上次修改后您希望保留它们的天数。
优点
与此处的其他答案相比,这有一些优势:
我能看到的唯一问题是人们是否将 20 年前最后修改的文件复制到放置文件夹。我认为在大多数情况下,这不太可能是一个大问题,但它可能会出现。
您可以通过具有“上传”IFRAME 的网页正式将文件添加到投递箱。然后,用户可以“发布”该文件,该文件调用服务器上的 PHP/ASP 作业,该作业获取该文件并将其放置在褶皱位置。PHP/ASP 可以执行任意数量的索引/分析操作。
我将创建一个脚本,该脚本每五分钟作为计划任务运行一次,并做两件事。
存在一种标记文件的机制,即存档位。它从 DOS 的早期就已经存在,并且存在于 FAT 和 NTFS 上。
基本上,每个文件都会默认设置它的存档位。如果您在放置文件夹中看到带有存档位的文件,(1) 清除该位并 (2) 将其日期设置为今天。如果您看到没有该位且日期 <= 7 天以前的文件,请将其删除。
如果用户在放置文件夹中写入文件,则其存档位会再次设置,因此其生命周期也将重置为 7 天。毕竟,它实际上是一个新文件。
您现在可以安全地使用 FileSystemWatcher。它所具有的任何问题(例如重复事件、缓冲区溢出丢失详细信息)都不再重要,因为相关信息都在文件元数据中。