我需要计算目录中的文件数.我可以使用该目录中的所有文件的名称System.IO.Directory.GetFiles()
并获取该数组的长度,但在大型目录上需要太长时间.有没有办法获得计数而不必得到名字?
我不相信,不 - 至少不是在vanilla .NET中.我怀疑这不是实际取名的花费时间 - 这是操作系统遍历目录内部.有可能是一个Win32调用,你可以通过P/Invoke的制作.
你正在查看的目录有多大?一般来说,在目录中拥有超过几百个文件至少在传统上并不是一个好主意.文件系统在这方面有所改进,但我不知道NTFS和Fat32目前的状态.
我做了一点测试 - 在C++/Qt和C++/CLI中编写了相同的任务:
LARGE_INTEGER i1, i2; QueryPerformanceCounter(&i1); int count = IO::Directory::GetFiles(L"c:\\windows\\system32")->Length; QueryPerformanceCounter(&i2); __int64 result = i2.QuadPart - i1.QuadPart;
结果大约是16.500.000
和
LARGE_INTEGER i1, i2; QueryPerformanceCounter(&i1); intcount = QDir("c:/windows/system32").entryList(QDir::Files).count(); QueryPerformanceCounter(&i2); __int64 result += i2.QuadPart - i1.QuadPart;
结果大约是2.100.000.000
文件数量为2125