Я на c++builder'е делал подобное "дерево", "физически" структура хранилась в моём формате (пара классов вроде всего понадобилась), а в TreeView только отображение. При этом каждому узлу можно задавать какие вздумается "свойства".
На счёт привязки к папкам - у меня был параметр - глубина вложенности узла. С его помощью можно создать структуру папок.
Псевдокод:
//tree - наш объект дерево
//получаем максимальную вложенность
int deepMax = tree.getDeepMax();
//проходим по всем уровням
for(int k=0;k<deepMax;++k)
{
//создаём каталоги для каждого уровня
createFolders(k);
}
void createFolders(int deepIndex)
{
Node node;
for(int k=0;k<tree.getNodeCount();++k)
{
node = tree.getNodeAt(k);
if(node.getDeepIndex() == deepIndex)
{
//функция создания папки на винте
CreateDir(node.getDir());
}
}
}
//для узла путь к папке можно задавать в момент его создания
String updateDir()
{
dir = "";
if(parent != 0)
dir = parent.getDir()+"/";
dir += text;
}
Таким образом сначала создаются родительские каталоги, потом дочерние вглубь.