繁体   English   中英

Windows / NTFS:目录中的文件数,不枚举它们

[英]Windows / NTFS: Number of files in a directory, without enumerating them

Windows中是否有一种方法可以获取目录中的文件数(非递归就足够了),而没有通过FindFirst/NextFile枚举它们的潜在重大开销?

目的是估计需要处理多少文件。
目录结构已知且不深,文件夹通常不包含未知文件。

由于数据不是必须继续并且文件夹实际上总是在本地驱动器上,因此可以接受特定于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搜索您的网站

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM