2010-02-22 10 views
5

Actualmente estoy trabajando en una aplicación WPF tipo Paint y ahora me paro ante el problema de cómo habilito a mis usuarios para guardar las imágenes creadas. Normalmente, simplemente los guardo en el disco, pero en esta aplicación tengo el requisito de permitir al usuario crear más "imágenes" de las ya creadas. Esto todavía no sería un problema con un enfoque de sistema de archivos normal, pero el usuario también debería ser capaz de buscar imágenes por propiedades específicas como categorías/etiquetas, etc. y eso sería difícil con un enfoque de sistema de archivos normal.C#: Base de datos interna de archivo en la aplicación

Así que pensé en algunas opciones que tengo para darme cuenta de lo que quiero y ahora me gustaría saber qué piensas de los enfoques o si incluso conoces uno mejor. Los enfoques son:

  • Almacenamiento de imágenes en una base de datos interna de la aplicación (a través de SQLite o algo similar)
  • Almacenamiento de imágenes como archivos normales en el sistema de archivos y mantener una base de datos en la aplicación para hacer referencia a estas imágenes (lo que sucede si las imágenes fueron borrados por el usuario?)
  • Almacenamiento de imágenes como archivos normales en el sistema de archivos de base de datos sin extra en la aplicación (es difícil de filtrar por categorías, etc.)

Gracias!

Respuesta

1

Muchos programas (por ejemplo, Aperture, Lightroom, Expression Media por nombrar algunos) almacenan sus imágenes en el disco y luego mantienen una memoria caché de metadatos en una base de datos. Este parece ser el enfoque más sensato para su aplicación.

1

SQLITE será una buena elección que siento. La versión 3 en adelante BLOB es totalmente compatible, por lo que puede pensar en SQLITE.

0

me gustaría ir para el segundo enfoque y utilizar el FileSystemWatcher para seguir los cambios, mientras que el programa se está ejecutando e inicie una sincronización durante el inicio para realizar un seguimiento de los cambios desde la última vez que la aplicación se correr.

SqlLite o SQL Compact Editio son buenas opciones para una base de datos local para rastrear los metadatos.

+1

FileSystemWatcher tiene algunas limitaciones cuando se agregan/eliminan grandes cantidades de archivos al mismo tiempo, aunque si solo se agregan o eliminan uno o dos archivos a la vez, debería estar bien. – ChrisF

0

Es ciertamente posible almacenar la imagen en una base de datos. En realidad, puede almacenar la secuencia de imagen tal como se guardará en el archivo para ahorrar espacio. Al leer, simplemente descomprime usando la funcionalidad del lector de flujo.

Esto no tiene los problemas de las otras dos soluciones (hacer frente a la eliminación de archivos, encontrar los archivos por categoría).

Puede guardar archivos usando el sistema de archivos creando carpetas y subcarpetas basadas en sus categorías, pero eso no le permite la flexibilidad de tener más de una categoría por archivo.

Cuestiones relacionadas