FindFirst/FindNext 很慢。我看到像 Defraggler 这样的程序可以快速收集这个列表。他们使用什么 Windows API?
2 回答
你说“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()”等内容。
不确定碎片整理程序;但是你可以使用 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 结帐的更多信息