я ожидаю иметь более миллиона файлов с уникальными именами. Мне сказали, что если я помещу все эти файлы в одну или две директории, скорость поиска этих файлов будет очень низкой. Итак, я придумал следующую архитектуру каталогов.
Я хочу, чтобы структура каталогов разветвлялась на 10 подкаталогов, а уровень подкаталогов будет равен 4. Поскольку имена файлов гарантированно уникальны, я хочу использовать эти имена файлов для создания хэшей, которые можно использовать для положить файл в каталог, а также позже, чтобы найти его. Случайные значения хеша сделают каталог, в котором будет приблизительно 1000 файлов.
, поэтому, если F является корневым каталогом, то для вставки или поиска файла необходимо выполнить следующие шаги:
Я хочу использовать числа от 0 до 9 в качестве имен каталогов
h=hash(filename)
sprintf(filepath,"f//%d//%d//%d//%d//.txt",h%10,h%10,h%10,h%10);
КАК СОЗДАТЬ ЭТИ СПРАВОЧНИКИ?
EDIT:
Все файлы являются текстовыми файлами.
Программа будет распространена среди многих людей с целью сбора информации для исследования. Поэтому важно, чтобы эти файлы создавались следующим образом.
EDIT:
я создал следующий код для реализации perreal's псевдокода. Он компилируется к успеху, но выдает ошибку времени выполнения, указанную в конце.
ошибка возникает в строке 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;
}
Необработанное исключение в 0x5b9c1cee (msvcr100d.dll) в mkdir.exe:
0xC0000005: Место записи нарушения прав доступа 0x00be5898.