Estoy creando un programa en el que el usuario compila directorios (no en Windows, en mi aplicación) y en estas carpetas hay subcarpetas y demás; 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.Estructura de datos utilizada para la estructura de directorios?
Respuesta
Esto es lo que hago:
cada registro de la base de datos tiene dos campos: ID y ParentID. Los ID son de 4 a 5 caracteres (Base36, a-z: 0-9 o algo similar). IDs de padres son una concatenación de estructura completa del padre ...
Entonces ...
Esta estructura:
Root
Folder1
Folder2
Folder3
Folder4
Folder5
Folder6
se representaría así:
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 hijos:
DELETE FROM Folders WHERE ID='0004' AND ParentID LIKE '00000004%'
Para mover una carpeta y sus hijos, usted tiene que actualizar todos los registros que utilizan el mismo padre, a la nueva matriz.
Y yo no quiero LINIT las carpetas o los niveles de subcarpetas
Una limitación obvia de esto es que el número de subcarpetas están limitados al tamaño de su campo ParentID.
Si agrego el campo "tamaño" para cada carpeta/documento, ¿cómo actualizar el tamaño para todos los padres? – tuananh
puedo pensar en algunas maneras en que podría estructurar esto, pero nada podría superar lo obvio:
utilizar el sistema de archivo real.
Modificado, pero en realidad, ¡esta es la única respuesta correcta! –
¿Por qué? Sin pretender parecer frívolo, mi pregunta es sincera. – iokevins
¿Qué sucede si alguien quiere mantener una instantánea en la memoria para que IO sea mínima y solo para escrituras? Entonces que ? ... Usar el sistema de archivos actual no es una opción para sistemas de alto rendimiento. –
Me gustaría ver en el uso de algún tipo de tree data structure
Sé que la pregunta está pidiendo específicamente para una estructura de datos, pero ...
Si está utilizando un lenguaje orientado a objetos tal vez usted puede utilizar el patrón de diseño compuesto que es ideal para este tipo de estructura similar a un árbol jerárquico. Obtienes lo que estás pidiendo.
La mayoría de los lenguajes 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.
Me gustaría contar con directorios como una matriz de objetos que son directorios o archivos, por ejemplo.
puede utilizar m-forma la estructura de datos de árbol
Esto debería ser un comentario. –
debería recomendar B + Árbol .... Usted puede utilizar fácilmente la indexación (página, carpeta, etc.) y todo.
B+ Tree http://commons.wikimedia.org/wiki/File:Btree.png
para más información: http://ozark.hendrix.edu/~burch/cs/340/reading/btree/index.html
- 1. Estructura de datos utilizada para implementar hojas de cálculo
- 2. Maven estructura de directorios
- 3. Estructura de datos utilizada para mensajes SMS en Android
- 4. ¿Estructura de cola de prioridad utilizada?
- 5. Estructura de directorios para una biblioteca C++
- 6. java.util.zip - Recreando la estructura de directorios
- 7. Estructura de datos eficiente para la inserción
- 8. maven artifact repository estructura de directorios especificaciones
- 9. Agregar estructura de directorios a SVN Repo
- 10. Estructura de la base de datos para estructura de datos de árbol
- 11. Estructura de datos para datos espaciales
- 12. crear cremallera - ignorar estructura de directorios
- 13. proyecto Java convención estructura de directorios
- 14. Estructura de directorios para proyecto de fajo de plataforma multiplataforma
- 15. estructura de datos utilizada para implementar la opción UNDO y REDO
- 16. ¿Es posible cambiar la estructura de directorios de Yeoman?
- 17. Filtro de subdirectorios Git con la estructura de directorios existente
- 18. git-filter-branch: salir de la estructura de directorios
- 19. ¿Cómo puedo personalizar la estructura de directorios de Jasmine?
- 20. ¿la mejor estructura de datos para datos multidimensionales?
- 21. ¿Cómo guardo la estructura de directorios al compilar CoffeeScript?
- 22. Estructura de datos para elegir elementos aleatorios?
- 23. Estructura de datos para almacenar eventos recurrentes?
- 24. Estructura de datos para representar un laberinto
- 25. Estructura de datos para dados cargados?
- 26. Estructura de datos para niveles en juegos
- 27. Estructura de datos bidireccionales para esta situación
- 28. Estructura de datos para almacenar Rangos
- 29. serialización de la estructura de datos Clojure
- 30. Estructura de datos para almacenar matrices dispersas
A juzgar por la especificación, una carpeta no puede contener una mezcla de carpetas y documentos? ¿Y no puedes tener subcarpetas vacías? Por favor sea preciso. –
En realidad, una parte dice que las carpetas pueden no contener una mezcla; otra parte sugiere que podrían. –