我希望有超過一百萬個具有唯一名稱的文件。我被告知,如果我把所有這些文件放在一個或兩個目錄中,這些文件的搜索速度將非常慢。所以我想出了以下目錄結構。如何在c中爲以下要求創建遞歸目錄?
我想要目錄結構分支出10個子目錄和子目錄的級別將是4.因爲文件名保證是唯一的我想使用這些文件名作出哈希可以使用把文件放在一個目錄中,以後再找到它。隨機散列值將使目錄具有大約1,000個文件。
所以如果F是根目錄,然後插入或搜索文件將要經過以下步驟:
我想從0-9用數字組成的目錄名
h=hash(filename)
sprintf(filepath,"f//%d//%d//%d//%d//.txt",h%10,h%10,h%10,h%10);
怎麼辦我創建了這些目錄?
編輯:
所有的文件都是文本文件。該計劃將分發給許多人,以收集研究信息。所以這些文件就像這樣創建很重要。
編輯:
我創建了下面的代碼來實現perreal的僞代碼。它編譯成功,但給出了最後給出的運行時錯誤。 錯誤發生在sprintf()
行。
#include<iostream>
#include<stdlib.h>
#include<windows.h>
void make_dir(int depth, char *dir) {
if (depth < 4) {
if (! CreateDirectoryA (dir,NULL))
for (int i = 0; i < 10; i++) {
sprintf(dir,"\\%d",i);
char *sdir=NULL ;
strcpy(sdir,dir);
CreateDirectoryA(sdir,NULL);
make_dir(depth + 1, sdir);
}
}
}
int main()
{
make_dir(0,"dir");
return 1;
}
未處理的異常在mkdir.exe 0x5b9c1cee(msvcr100d.dll): 0000005:訪問衝突寫入位置0x00be5898。
在編寫更多代碼之前,您應該首先嚐試使用all-in-one-directory目錄,並查看它是否與所有這些一樣糟糕。您以後可以隨時升級到花哨的目錄層次結構。 – zmccord 2012-03-02 15:24:44
一次創建一個目錄。 – 2012-03-02 15:32:45
我無法這樣做,因爲我必須將可執行文件發送給超過一百人並收集這些文件。 – John 2012-03-02 15:33:34