有没有办法在Windows中获取目录中的文件数量(非recursion是足够好的)没有通过FindFirst/NextFile
枚举它们的潜在的重大开销?
目的是估计需要处理多less个文件。
目录结构是已知的而且不深,文件夹通常不包含未知文件。
由于数据不是必不可less的,并且文件夹几乎总是在本地驱动器上,所以可以接受NTFS特定的命令(假设不需要提升)。
有任何想法吗?
跟踪目录中文件的数量是一个开销,不能为文件系统提供任何好处,所以他们都没有。
计数本地驱动器上的文件对于大多数用途来说应该足够快。 处理这些文件的时间肯定会占用一小部分时间。
假设索引服务正在运行并且目录被索引,我们可以查询目录并计算给定目录上的文件。
我不知道查询目录是否更快,唯一的想法是在我脑海中。
问候。
VB.NET中的示例代码
Sub Main() Try ' Catalog Name Dim strCatalog As String = "System" Dim strQuery As String strQuery = "Select DocPageCount,DocTitle,Filename,Size,PATH,URL from SCOPE('shallow traversal of ""C:\Windows""')" Dim connString As String = "Provider=MSIDXS.1;Integrated Security .='';Data Source='" & strCatalog & "'" Dim cn As New System.Data.OleDb.OleDbConnection(connString) cn.Open() Dim cmd As New System.Data.OleDb.OleDbCommand(strQuery, cn) Dim rdr As System.Data.OleDb.OleDbDataReader = cmd.ExecuteReader() Dim files As Integer = 0 While rdr.Read() files += 1 Console.WriteLine("Path: {0} Filename: {1} Size : {2}", rdr("PATH"), rdr("Filename"), rdr("Size")) End While rdr.Close() rdr = Nothing cmd.Dispose() cmd = Nothing cn.Close() Console.WriteLine("Total Files: {0}", files) Catch ex As Exception Console.WriteLine(ex) End Try End Sub
更多信息: 使用Microsoft索引服务和ASP.NET搜索您的网站