2010-08-22 24 views
3

我在22個文件夾中有660000個xml文件(具有唯一文件名)。每個文件夾都有30000個文件。我需要在C#應用程序中有效地找到它們的名稱。我知道Windows中有一個SearchIndexer服務(?Vista +?),我只是想知道我是否可以使用它,或者我必須自己編制索引文件?索引文件和最快捷的方式來找到文件夾中的文件?

另外,我想我可以創建一個數據庫,文件名是主鍵和另一列中的路徑。但是,我應該創建一個有660000行的表或者每個有30000行的22個表?爲什麼?

在此先感謝。

回答

2

我的經驗可能會過時(NTFS),但是您應該檢查在30,000個文件的目錄中打開文件的速度有多快。我想你可能會發現將文件分發到更多的目錄會更好。

如果你有過的目錄佈局控制,考慮散列文件名的數字0和660000.之間然後,您可以使用文件系統作爲索引:

00/ 
    00/ 
    <99 files that hash here> 
.. 
65 

您仍然需要寫一個簡單的「索引器」讀取每個文件,計算它的散列並將其存儲在正確的位置。然後,您查找一個文件:

Lookup(string filename) 
{ 
    int hash = filename.GetHashCode() % 660000; 
    string directory = HashToDirectory(hash); 
    string path = Path.Combine(directory, filename); 
    ... 

有一件事是很好的這個做法是,你可以分析各種「密度」的文件目錄中的數量。您只需更改HashToPath函數。你也不需要數據庫。

我們使用了一個類似的方法與一個網絡爬蟲,它存儲了一個很多文件。它反對NTFS,所以YMMV。

相關問題