PDA

Ver la Versión Completa : Leer fichero ini en memoria


oscjae
09-12-2015, 17:25:25
Hola, he estado mirando por el foro y no he encontrado ningun hilo que pudiera resolverme esta duda:

Tengo una tabla de una base de datos (firebird) en la que hay un campo blob, en ese campo guardo archivos ".ini", el problema o la duda esta en cuanto quiero leerlo, hay alguna forma de leerlo sin crear ese archivo fisicamente en disco?, es decir, si creo una variable TMemoryStream y con el campo blob uso SaveToStream(variable), como puedo utilizar con la clase TIniFile o alguna otra clase esa variable y leer las secciones, claves, etc... sin crear el archivo en disco?

Gracias.

Neftali [Germán.Estévez]
09-12-2015, 18:32:18
¿Has revisado la clase TMemIniFile?

oscjae
09-12-2015, 18:43:20
Si, al poner
vFichero:=TMemIniFile.Create('C:\fichero.ini');
Me refiero justo a eso, el fichero tiene que estar en disco, y lo que me gustaria es que no tuviera que guardarlo en disco, salvarlo en una variable Stream, desde el campo blob y poder leer ese fichero guardado en la variable stream sin grabarlo fisciamente en disco, la verdad, no se si es posible no apoyarme en disco.

Neftali [Germán.Estévez]
09-12-2015, 18:48:28
Esto no lo aseguro, pero es posible que sino llamas al UpdateFile, nunca llegue a guardarse en disco.

AgustinOrtu
09-12-2015, 19:02:45
TMemIniFile tiene un nombre que a primera vista puede prestar a confusión; en realidad la única diferencia con TIniFile es que los cambios se mantienen en memoria y no son grabados en disco hasta llamar a UpdateFile; esto es útil para por ej ir obteniendo valores y luego validar, si todo va bien, grabar

Con respecto a la pregunta original no se puede hacer, por lo menos no con la RTL de Delphi, ni ninguna biblioteca que conozca

Lo mejor que podes hacer es obtener y grabar a disco el blob, luego instanciar el ini

Ñuño Martínez
09-12-2015, 20:57:27
Quizá puedas salir del paso usando directamente un TStringList. Me explico: la propiedad "Values" de dicha clase (o mejor dicho, de su antecesora) permite acceder a pares"nombre=valor", de forma similar a los archivos INI. El problema es que no maneja claves o secciones "[secion]" valores por defecto, pero quizá pueda hacerse algo.

AgustinOrtu
09-12-2015, 21:25:50
O mejor aun, crea una tabla/sqlite

oscjae
10-12-2015, 01:07:22
Respecto al StringList lo pensé en su momento, pero no me sirve, es un fichero ini muy extenso y repite claves bastantes veces, si no hubiera sido una buena solución, y respecto a la base de datos sqlite no podría ser, de hecho yo leo el ini de un campo blob, tengo que cargar los valores en una clase, mi intención es no pasar por disco para leer ese ini, pero no voy a tener mas remedio.

Muchas gracias por los comentarios, un saludo.