【发布时间】:2012-03-21 02:25:53
【问题描述】:
我希望拥有超过一百万个具有唯一名称的文件。有人告诉我,如果我将所有这些文件放在一个或两个目录中,这些文件的搜索速度将会非常慢。所以我想出了以下目录架构。
我希望目录结构分支出 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);
如何创建这些目录?
编辑:
所有文件都是文本文件。 该程序将分发给许多人,以收集信息进行研究。所以 tt 像这样创建这些文件很重要。
编辑:
我创建了以下代码来实现 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) 处未处理的异常: 0xC0000005:访问冲突写入位置0x00be5898。
【问题讨论】:
-
在编写更多代码之前,您可能应该先尝试一体化目录,看看它是否与所有这些一样糟糕。您以后可以随时升级到花哨的目录层次结构。
-
一次创建一个目录。
-
我不能这样做,因为我必须将可执行文件发送给一百多人并收集这些文件。
标签: c visual-c++ recursion directory