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

有帮助吗?

解决方案

这就是我的所作所为:

数据库中的每条记录都有两个字段:ID和ParentID。 ID为4-5个字符(Base36,a-z: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字段的大小。

其他提示

我可以想到一些方法可以解决这个问题,但没有什么比这更明显了:

使用实际的文件系统。

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

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

B + Tree http://commons.wikimedia.org/wiki/File:Btree .PNG

了解更多信息: http://ozark.hendrix.edu/~burch/ CS / 340 /读取/ B树/ index.html中

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

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

大多数OO语言都为文件系统提供了某种抽象,因此我可以从那里开始。然后,如果需要,则将其子类化。

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top