在我之前的问题"如何找到闪存设备的唯一序列号?" 我最终要求找到驱动器号的方法.那个问题解决了.
但是,我的初步问题尚未得到解答.我希望能够将可移动设备(USB驱动器,SD卡,(外部硬盘驱动器?)等)分开,并且在重新连接时始终能够再次识别它们.这也应该可以在任何其他计算机上使用.幸运的是,我不关心正在格式化的驱动器(如果/何时,它们在我的程序中被视为新驱动器),那么我可以使用分区和卷ID作为我识别的一部分吗?我问这是因为PNPDeviceID 不是唯一的.我发现它取决于阅读它的硬件,见下图:
替代文字http://i48.tinypic.com/28uofmc.png
替代文字http://i46.tinypic.com/rk5tv6.jpg
因此,我正在搜索的是一种使用以下方法检测和识别任何计算机上的任何可移动设备的方法:Win32_DiskDrive,Win32_DiskPartition,Win32_LogicalDisk.我要感谢RRUZ的原始代码:
program GetWMI_USBConnectedInfo;
{$APPTYPE CONSOLE}
uses
Windows,
Classes,
ActiveX,
Variants,
SysUtils,
WbemScripting_TLB in '..\..\Documents\RAD Studio\5.0\Imports\WbemScripting_TLB.pas';
procedure GetUSBDiskDriveInfo;
var
WMIServices : ISWbemServices;
Root,a,b : ISWbemObjectSet;
Item,Item2 : Variant;
i,ii,iii,iiii: Integer;
start,stop,freq:Int64;
begin
QueryPerformanceFrequency(freq);
QueryPerformanceCounter(start);
WMIServices := CoSWbemLocator.Create.ConnectServer('.', 'root\cimv2','', '', '', '', 0, nil);
Root := WMIServices.ExecQuery('Select * From Win32_DiskDrive','WQL', 0, nil);
for i := 0 to Root.Count - 1 do
begin
Item := Root.ItemIndex(i);
for ii …Run Code Online (Sandbox Code Playgroud) 首先; 我不一定在寻找Delphi代码,以任何你想要的方式吐出来.
我一直在寻找(特别是在这里)并找到一些关于人们寻找比较目录(包括子目录)的方法,尽管他们使用逐字节方法.第二个,我不是在寻找一个difftool,我"只是"寻找一种方法来查找不匹配的文件,同样重要的是,在一个目录中但不在另一个目录中的文件,反之亦然.
更具体一点:我有一个目录(备份文件夹),我不断使用FindFirstChangeNotification更新.虽然我第一次需要复制所有文件,但我还需要在应用程序启动时检查备份目录(如果在应用程序未运行时发生了某些事情或者FindFirstChangeNotification没有捕获文件更改).为了解决这个问题,我正在考虑为备份文件创建CRC列表,然后运行原始目录,为每个文件计算CRC,最后比较两个CRC.然后以某种方式查找一个目录而不是另一个目录中的文件(再次;反之亦然).
这是一个问题:这是最快的方式吗?如果是这样,那么(大致)如何完成工作?