usan usa rutas representar relativas punto para los funciones estructura doble directorios directorio comando carácter caracteres arbol absolutas data-structures directory directory-structure

data-structures - rutas - los caracteres..(doble punto) se usan para representar linux



Estructura de datos utilizada para la estructura de directorios (7)

Estoy creando un programa en el que el usuario compila directorios (no en Windows, en mi aplicación) y en estas carpetas hay subcarpetas, etc. cada carpeta debe contener carpetas o documentos. ¿Cuál es la mejor estructura de datos para usar? Tenga en cuenta que el usuario puede seleccionar una subcarpeta y buscar documentos en ella y en sus subcarpetas. Y no quiero limitar las carpetas o los niveles de las subcarpetas.


Esto es lo que hago:

Cada registro en la base de datos tiene dos campos: ID y ParentID. Los ID son de 4 a 5 caracteres (Base36, az: 0-9 o algo similar). Los ID de los padres son una concatenación de la estructura completa de los padres ...

Asi que...

Esta estructura:

Root Folder1 Folder2 Folder3 Folder4 Folder5 Folder6

Sería representado de esta manera:

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

Me gusta esta estructura porque si necesito encontrar todos los archivos en una carpeta puedo hacer una consulta como:

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

Para eliminar una carpeta y todos sus elementos secundarios:

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

Para mover una carpeta y sus elementos secundarios, debe actualizar todos los registros que usan el mismo elemento primario al nuevo elemento primario.

Y no quiero lintear las carpetas o los niveles de las subcarpetas

Una limitación obvia a esto es que el número de subcarpetas está limitado al tamaño de su campo ParentID.


La mayoría de los lenguajes de OO vienen con algún tipo de abstracción para el sistema de archivos, por lo que es allí donde comenzaría. Luego subclases si es necesario.

Esperaría directorios como una matriz de objetos que son directorios o archivos, por ejemplo.


Puedo pensar en algunas formas en que podrías estructurar esto, pero nada superaría lo obvio:

Usa el sistema de archivos actual.


Sé que la pregunta es específicamente pedir una estructura de datos, pero ...

Si está utilizando un lenguaje orientado a objetos, tal vez pueda usar el patrón de diseño compuesto que es ideal para este tipo de estructura de árbol jerárquica. Obtienes lo que estás pidiendo.


puedes usar la estructura de datos de árbol m-way