windows - 如何以编程方式查找两个目录之间的差异

标签 windows delphi delphi-2007

首先;我不一定要找 Delphi 代码,你想怎么吐就怎么吐。

我一直在四处搜索(尤其是在这里)并发现了一些关于寻找与目录(包括子目录)进行比较的方法的人,尽管他们使用逐字节的方法。其次,我不是在寻找 difftool,我“只是”在寻找一种方法来查找不匹配的文件,同样重要的是,在一个目录中但不在另一个目录中的文件反之亦然。

更具体地说:我有一个目录(备份文件夹),我使用 FindFirstChangeNotification 不断更新它。虽然第一次我需要复制所有文件,并且我还需要在应用程序启动时检查备份目录与原始目录(以防应用程序未运行或 FindFirstChangeNotification 未捕获文件更改时发生某些情况)。为了解决这个问题,我正在考虑为备份文件创建一个 CRC 列表,然后遍历原始目录计算每个文件的 CRC,最后比较两个 CRC。然后以某种方式查找位于一个目录中而不是另一个目录中的文件(同样;反之亦然)。

问题来了:这是最快的方法吗?如果是这样,一个人将如何(大致)完成这项工作?

最佳答案

您不一定需要每个文件的 CRC,对于大多数正常用途,您可以只比较每个文件的“最后修改”日期。它的方式更快。如果您需要额外的安全性,您还可以比较长度。您可以通过查找功能免费获得这两个指标。

在您的更改通知中,您可能应该将文件添加到队列中,并使用计时器对象每大约 30 秒左右复制一次新排队的文件,这样您就不会因频繁的更新/检查而使系统陷入困境。

为了提高速度,尽可能使用 Win32 函数,避免任何 Delphi 查找/复制/getfileinfo 函数。我不熟悉 Delphi 框架,但例如 C# 的东西比 Win32 函数慢得多。

关于windows - 如何以编程方式查找两个目录之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1964511/

相关文章:

delphi - 在 Windows 7 中控制主扬声器音量

windows - dia2dump : CoCreateInstance failed - HRESULT = 80040154

delphi - 如何从Delphi中的接口(interface)引用获取RTTI?

delphi - "No Native to Message converter set"是什么意思?

delphi - 项目版本设置不断恢复

delphi - 读取大型二进制文件

Delphi例程以任意语言以任意编码显示任意字节

c - 写入文件时获得不同的输出

c# - 如何以管理员身份在 guest 帐户中运行 C# 应用程序

c - 为什么 Qt 应用程序仅在 Spy++ 运行时创建窗口句柄?