1

FindFirst/FindNext 很慢。我看到像 Def​​raggler 这样的程序可以快速收集这个列表。他们使用什么 Windows API?

4

2 回答 2

0

你说“FindFirst/FindNext”很慢。我认为在执行方面,_findfirst(), _findnext(), _findclose() #include <io.h> 是尽可能快的。

如果您需要很长的路径名,则需要使用 Windows API 版本。

Windows API 是 FindFirstFile()、FindNextFile() 和 FindClose(),头文件是 #include <windows.h>。

Windows API 的文档告诉您如何在目录字符串前面加上“\?\”并获得最大可能的路径长度。

如果您需要比 C 库函数提供的更多信息,则需要使用 Windows API FindFirstFileEx()、FindNextFileEx()、FindClose()。

我必须向您推荐文档以获取详细信息。

最简单,C 库,_findfirst():https ://msdn.microsoft.com/en-us/library/zyzxfzac.aspx

返回更多信息,最大路径长度,Windows API FindFirstFile():https ://msdn.microsoft.com/en-us/library/windows/desktop/aa364418(v=vs.85).aspx

返回的最大信息、最大路径长度、Windows API FindFirstFileEx(): https ://msdn.microsoft.com/en-us/library/windows/desktop/aa364419(v=vs.85).aspx

如果链接不再有效,您可能可以搜索“C 语言 _findfirst()”等内容。

于 2015-02-13T03:29:29.147 回答
-1

不确定碎片整理程序;但是你可以使用 powershell

如果您使用的是 windows xp 系统,则必须下载并安装它

使用 powershell,您可以执行简单的查询

例如:

$foo = Get-childItem -Path "c:\windows"

在 powershell 中,这会将 windows 目录中的所有文件名放入一个名为 $foo 的数组中

然后,您可以更进一步,获取数组并将其通过管道传输到文件中

$foo >> c:\temp\test.txt

示例输出:

    模式 LastWrite 时间 长度 名称                                       
---- ------------- ------ ----      
d---- 2009 年 7 月 14 日凌晨 1:32 网络                                        
d---- 2012 年 5 月 9 日凌晨 3:20                                     
-a--- 2012 年 2 月 3 日下午 1:01 16896 AsTaskSched.dll                            
-a--- 2011 年 4 月 6 日上午 12:46 32200 atiogl.xml                                 
-a--- 2/3/2012 12:35 PM 0 ativpsrm.bin                               
-a--- 2010 年 11 月 20 日晚上 10:24 71168 bfsvc.exe                                  
-a--s 2012 年 5 月 24 日晚上 10:17 67584 bootstat.dat                               
-a--- 2012 年 3 月 21 日晚上 11:58 1908 diagerr.xml                                
-a--- 2012 年 3 月 21 日晚上 11:58 1908 diagwrn.xml                                
-a--- 2012 年 5 月 4 日下午 6:19 28406 DirectX.log    

有关 powershell 结帐的更多信息

http://technet.microsoft.com/en-us/library/bb978526.aspx

于 2012-05-25T02:59:28.497 回答