栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何快速查找添加/删除的文件?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何快速查找添加/删除的文件?

我已经在工具metaMake中做到了这一点。这是食谱:

  1. 如果索引为空,则使用时间戳== dir.lastModified()-1将根目录添加到索引。
  2. 在索引中找到所有目录
  3. 将索引中目录的时间戳与文件系统中的时间戳进行比较。由于您具有完整路径(因此不会扫描涉及的树中的所有文件/目录),因此这是一种快速的操作。
  4. 如果时间戳已更改,则此目录已更改。重新扫描并更新索引。
  5. 如果在此步骤中遇到目录丢失的情况,请从索引中删除子树
  6. 如果遇到现有目录,请忽略它(将在步骤2中进行检查)
  7. 如果遇到新目录,请使用timestamp == dir.lastModified()-1添加该目录。确保在步骤2中考虑到它。

这将使您有效地注意到新文件和已删除文件。由于在步骤2中仅扫描已知路径,因此这将非常有效。文件系统很难枚举目录中的所有条目,但是当您知道确切名称时它们很快。

缺点:您不会注意到文件已更改。因此,如果您编辑文件,则 不会
反映在目录更改中。如果您也需要此信息,则必须对索引中的文件节点重复上述算法。这次,您可以忽略新的/已删除的文件,因为它们已经在目录运行期间进行了更新。

[编辑]
Zach提到时间戳是不够的。我的答复是:根本没有其他方法可以做到这一点。对于目录以及从实现到实现的更改,“大小”的概念是完全未定义的。没有API可以在其中注册“我希望在文件系统中发生任何更改时收到通知”。在您的应用程序处于活动状态时,有一些API可以工作,但是如果它停止或错过了一个事件,那么您将失去同步。

如果文件系统是远程的,情况会变得更糟,因为各种网络问题都可能导致您不同步。因此,尽管我的解决方案可能不是100%完美且不漏水,但除了结构最特殊的情况外,它都适用。这是唯一可以做到这一点的解决方案。

现在有一个单一的应用程序,它希望在进行修改后保留目录的时间戳:病毒或蠕虫。这显然会破坏我的算法,但是,这并不是要防止病毒感染。如果要防止这种情况,则必须采用完全不同的方法。

实现Zach想要的唯一的另一种方法是建立一个新的文件系统,将该信息永久记录在某个地方,将其出售给Microsoft,然后等待几年(大约10或更多),直到每个人都使用它。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/515318.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号