11

我正在制作一个用户构建目录的程序(不是在 Windows 中,在我的应用程序中),并且在这些文件夹中有子文件夹等等;每个文件夹都必须包含文件夹或文档。什么是最好的数据结构?请注意,用户可以选择一个子文件夹并在其中及其子文件夹中搜索文档。而且我不想限制文件夹或子文件夹级别。

4

7 回答 7

15

这就是我所做的:

数据库中的每条记录都有两个字段:ID 和 ParentID。ID 为 4-5 个字符(Base36、az:0-9 或类似字符)。父 ID 是父级完整结构的串联...

所以...

这种结构:

Root
   Folder1
   Folder2
      Folder3
   Folder4
      Folder5
         Folder6

将像这样表示:

ID     ParentID     Name

0000   NULL           ROOT
0001   0000           Folder1
0002   0000           Folder2
0003   00000002       Folder3
0004   0000           Folder4
0005   00000004       Folder5
0006   000000040005   Folder6

我喜欢这种结构,因为如果我需要查找文件夹下的所有文件,我可以执行如下查询:

SELECT * FROM Folders WHERE ParentID LIKE '0000%' -- to find all folders under Folder1

要删除文件夹及其所有子文件夹:

DELETE FROM Folders WHERE ID='0004' AND ParentID LIKE '00000004%'

要移动文件夹及其子文件夹,您必须将使用同一父文件夹的所有记录更新为新的父文件夹。

而且我不想限制文件夹或子文件夹级别

一个明显的限制是子文件夹的数量受限于 ParentID 字段的大小。

于 2008-11-01T17:44:31.340 回答
8

我可以想出几种方法来构建它,但没有什么能比得上显而易见的:

使用实际的文件系统。

于 2008-11-01T17:39:24.440 回答
5

我会考虑使用某种树数据结构

于 2008-11-01T17:50:56.523 回答
2

我应该推荐 B+ Tree .... 您可以轻松使用索引(页面、文件夹等)和所有 .

B+ 树 http://commons.wikimedia.org/wiki/File:Btree.png

欲了解更多信息: http: //ozark.hendrix.edu/~burch/cs/340/reading/btree/index.html

于 2013-10-17T08:42:41.260 回答
0

我知道这个问题是专门要求一个数据结构,但是......

如果您使用的是面向对象的语言,也许您可​​以使用非常适合这种类型的分层树状结构的复合设计模式。你得到你想要的。

于 2008-11-01T19:47:29.203 回答
0

大多数 OO 语言都带有文件系统的某种抽象,所以我将从这里开始。如果需要,然后将其子类化。

例如,我希望目录作为目录或文件的对象数组。

于 2008-11-01T20:01:08.817 回答
0

您可以使用 m-way 树数据结构

于 2010-04-02T17:51:25.417 回答