2012-05-19 48 views
5

我需要我的程序來計算磁盤驅動器上的文件數。計算驅動器上的文件數

這樣做的最快方法是什麼?

Directory.GetFiles()不是替代品,因爲它非常慢。

+0

什麼樣的答案是這樣的?必須有某種方式,我們有NTFS日誌,我們有WMI等等lol – animaonline

+3

這是關於問題的一個_comment_,而不是一個答案。而你只是說'GetFiles'「很慢」。你的定義是什麼?這個問題缺乏細節。 – Oded

+0

如果您有NTFS日記帳,則可以在開始時執行Directory.GetFiles(),然後使用日記帳維護計數器。 – volody

回答

2

您是否嘗試導入kernel32.dll並使用它?

有人在此之前發佈了一個很好的實現示例:https://stackoverflow.com/a/724184/912851。這可能值得一看。

編輯: 我看到我生命中最快的一個是this application。它使用ntfs日誌。並且在幾秒鐘內它就會在我的硬盤上列出數百萬個文件。 我認爲他們有一個sdk和C++或c上的源代碼。也許你可以創建一個託管的DLL並在C#上使用?

+0

是的,我也嘗試過,它真的很慢。但是,謝謝 – animaonline

+1

我很好奇,所以我做了一個小代碼來比較目錄樹上的兩種方法與42k文件:GetFiles = 1.2秒,此方法= 650毫秒。所以它已經快了兩倍...... Oded已經在上面寫過了,IO很慢,你不會立即得到成千上萬個文件的結果...... – Fabske

0
Func<string, int> files = null; 
files = p => Directory.GetFiles(p).Length() + Directory.GetDirectories(p).Select(p1 => files(p1)); 

int count = files(@"c:\"); 

可怕,但linqy!

+0

Directory.GetFiles()不是替代^^ – animaonline

+0

這是如何解決OP詢問的_slowness_問題? – Oded

+0

可怕的是,使用GetFiles,並且...不能編譯:p – Fabske

0

你可以讀出驅動USN日誌,這是非常快,但你需要管理員權利

+0

我需要一個可以與FAT文件系統一起工作的解決方案。 – animaonline

相關問題