2012-09-03 33 views
1

在Windows中有沒有一種方法可以獲取目錄中的文件數量(非遞歸是足夠好的),而無需通過枚舉全部枚舉FindFirst/NextFileWindows/NTFS:目錄中的文件數量,不包括它們

目的是估計需要處理多少個文件。
目錄結構已知且不深,文件夾通常不包含未知文件。

由於數據不是必不可少的,並且該文件夾實際上始終位於本地驅動器上,所以可以接受NTFS特定的命令(前提是不需要提升)。

任何想法?

回答

2

文件目錄中的數量保持跟蹤是一個開銷不用於文件系統帶來任何好處,所以他們都沒有。

在大多數情況下,對本地驅動器上的文件進行計數應該足夠快。它肯定會花費處理文件所需的一小部分時間。

+0

有道理。信息會很好地校準進度條,但這不是一個殺手 – peterchen

1

假設索引服務正在運行且目錄已建立索引,我們可以查詢目錄並計算給定目錄上的文件。

我不知道查詢目錄是否更快,其唯一的想法出現在我的腦海。

問候。在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 

示例代碼更多信息:Searching your web site with the Microsoft Indexing Service and ASP.NET

相關問題