2010-02-25 16 views
19

No estoy seguro de cuál podría ser el nombre "general" de algo como esto. Estoy buscando una biblioteca que me brinde un formato de archivo para almacenar diferentes tipos de datos binarios en un solo archivo en expansión.Sistema de archivos incrustado de código abierto (o sistema de archivos virtual de un solo archivo, o almacenamiento estructurado) para C

  • de código abierto, no GPL (LGPL bien)
  • interfaz de C
  • el formato de archivo es un archivo único
  • varios archivos dentro mediante una API de archivos POSIX-como (o varias "manchas" en el uso de alguna otra API)
  • archivo/edición de la estructura se realiza en el lugar
  • fiable primera, segunda performant

Los ejemplos incluyen:

Problemas con lo anterior:

  • whefs no parece ser muy maduro, pero describe mejor lo que busco
  • HDF, CDF, NetCDF son utilizables (también muy fiable y rápido), pero son bastante complicado y estoy no del todo convencidos de su apoyo a "manchas" opacos binarios

Editar:
se olvidó de mencionar, una pregunta más relevante:
Simple Virtual Filesystem in C/C++
otra pregunta similar: Is there an open-source alternative to Windows compound files?

Editar:
condición añadida de la edición in situ.

Editar:
whefs reemplazadas por: whio_epfs

+0

ROOT (http://root.cern.ch/) implementa tal cosa en su formato TFile, pero eso es C++. – dmckee

Respuesta

6

Esto parece hacer lo que estaba buscando: libgsf

todavía tiene que probar su fiabilidad/rendimiento y la forma de plataforma cruzada es el formato binario.

+0

¿No es así? solo para archivos como gzip? ¿Qué tipo de sistema de archivos virtual admite libgsf? –

+1

Es compatible con GZip, pero el caso de uso aquí fue más para el soporte de este formato: http://msdn.microsoft.com/en-us/library/dd942138.aspx – Ioan

+0

Entendido. Una última pregunta: ¿qué piensas sobre POLE? ¿Y libgsf incluso crea ese contenedor OLE con un tamaño fijo, finalmente? –

0

Suena como que está hablando el dispositivo de bucle de retorno de Linux, que permite tratar un archivo en un sistema de archivos como un dispositivo de bloques de primera clase (y a continuación, proceder a mkfs, montaje, etc.)

(¿Qué tipo de plataforma que se apuntan a? a? Algo Unix-like con todas las funciones en el espacio integrado con una pequeña huella?)

+0

multiplataforma es la intención. Ciertamente, Windows y una versión embebida de Linux. Consideré el dispositivo de bucle invertido, pero no lo mencioné porque no estaba seguro de si podría crecer en tamaño y no funcionaría en Windows. – Ioan

+0

Derecha. Si yo estuviera en tu lugar, entonces, también buscaría en los diversos sistemas de archivos con estructura de registro para ver si había uno con una licencia aceptable que pudieras hackear lo suficientemente bien como para trabajar en un país de usuarios y trabajar en un archivo como backing store (a diferencia de un dispositivo de bloque). – crazyscot

0

la biblioteca WxWindows compatible con archivos ZIP (ver http://docs.wxwidgets.org/stable/wx_wxarc.html#wxarc). Esto también tiene la ventaja de que puede ver los contenidos usando un administrador ZIP (por ejemplo, WINZIP).

una alternativa comercial es ChillKat (http://www.chilkatsoft.com/)

Si la seguridad es una preocupación, cifrar el contenido del archivo y mangle los nombres de archivo en el archivo ZIP.

+0

La seguridad no es una preocupación. No he examinado demasiado los tipos de archivos normales, pero me pregunto qué tan bien se comportan con respecto a los grandes conjuntos de datos, la alta velocidad, el acceso aleatorio del contenido interno del archivo y el lector/escritor simultáneo ... – Ioan

0
+0

Buena idea, pero aún no está madura. Depende de Eina, que actualmente es inestable. Además, básicamente almacena un mapa hash de "trozos", que requiere una capa adicional para gestionarlos. – Ioan

+0

El formato del contenedor Ogg también es muy similar a Eet en simplicidad: http://www.xiph.org/ogg/doc/ – Ioan

0

¿Qué hay de BerkeleyDB? No es exactamente un sistema de archivos, pero es bastante transparente almacenar "datos binarios" en un archivo. La licencia parece ser bastante permisiva también.

+0

Según http://www.oracle.com/technology/software/products/berkeley-db /htdocs/licensing.html requiere una licencia comercial para aplicaciones de código cerrado. Además, no sé cuánto más rápido que SQLite, que fue un poco más lento que simplemente almacenarlo directamente en un archivo. Esta fue una prueba simple, compromiso por lotes para almacenar datos. – Ioan

+0

Bueno, no mencionó que estaba haciendo una aplicación de código cerrado. Y sí, podría ser simplemente SQLke, pero con algunos años más de estabilidad en el lado incrustado. – lorenzog

+0

Lo siento, mi comentario fue engañoso. La licencia de fuente abierta actual de BerkeleyDB es similar a GPL (como en, requiere que se libere toda la fuente de la aplicación), violando uno de los requisitos que mencioné en la pregunta. – Ioan

Cuestiones relacionadas