Escritura de ficheros (el cuento de nunca acabar)

Queridos todos:

Vuelvo de nuevo con mis problemas de escritura "dinámica de ficheros". La cuestión es la siguiente:

Tras dar muchas vueltas a FAT y EFSlib y leer todo lo que he podido encontrar al respecto he llegado a las siguientes conclusiones (también abrí un hilo al respecto hace varios meses).

1.- Para leer archivos lo mejor es EFSlib porque los incrusta en el fichero .nds y es capaz de funcionar en emuladores -en ds.gba, que conste-, el inconveniente es que no permite escritura de ficheros.
2.- Para escribir ficheros lo mejor es FAT, pero tiene el inconveniente de que no funciona en emuladores y además su desarrollo se ha abandonado (mejor no decir nada de la nueva versión de PAlib: la instalé y cuando todo dejó de funcionar me dio un soponcio y no tiré el ordenador por la ventana porque... es caro [+furioso])
3.- Se puede alternar entre ambas mediante el chdir EFS: y chdir FAT: pero no tengo muy claro si hay que iniciar FAT (supongo que sí pero todavía no he llegado al punto de usar ambas).

Hasta ahí lo que sé. Lo que no sé es si es posible trabajar con ficheros con datos binarios porque hasta la fecha sólo he podido trabajar en modo texto. La cuestión es que si trabajas con variables struct de cierta complejidad es comodísimo escribirlas y leerlas directamente en el fichero y no andar haciendo conversiones con el texto leído y llenando variables.

Si alguien ha trabajado con esto le agradecería mucho la ayuda pues, francamente, ya no sé dónde mirar o qué más hacer y si no se puede... pues no se puede, tendré que rehacer toda la parte de ficheros [buuuaaaa]. De todos modos, ya lo he hecho varias veces debido a mi mal entendimiento de cómo funcionan ambos métodos.

Un cariñoso [bye] a todos y [beer] [beer] [beer] [beer] para el que lo responda.
En el modo efs se puede escribir ficheros, yo no lo he probado pero hay juegos que guardan los datos en el mismo nds. Asi que ovbiamente se podra.

Luego el fat funciona perfectamente con palib. Al menos con las palibs que tengo (la ultima version estable y oficial), por si te interesan te dejo video tutorial + archivos:
http://www.youtube.com/watch?v=Wz96deue9nk
http://www.megaupload.com/?d=EK8HHJHS

Lo de guardar variables es facil. Simplemente si quieres guardar la variable int cosa:

fwrite(&cosa,1,1,archivo);

Respondiendo a tu pregunta, si. Se puede trabajar con datos binarios, recuerda que la libreria fat se maneja exactamente igual que la stidio. Si no la conoces, te dejo esta pagina que me ayudo mucho para aprender a manejarla:
http://c.conclase.net/librerias/libreria.php?lib=stdio

Lo de combinar efs y fat en teoria deberia ser asi aunque no estoy seguro. Lo mejor es probarlo y salir de dudas ^^.

Saludos!
negatus escribió:1.- Para leer archivos lo mejor es EFSlib porque los incrusta en el fichero .nds y es capaz de funcionar en emuladores -en ds.gba, que conste-, el inconveniente es que no permite escritura de ficheros.

Ideas admite fat y efs, no$gba solo efs, desmume ni idea. Ninguno permite escritura. Y lo del .ds.gba es una chorrada, a mi siempre me ha funcionado el fat y efs con el nds a secas. Es más, las versiones nuevas de PAlib y libnds no generan el .ds.gba.
negatus escribió:2.- Para escribir ficheros lo mejor es FAT, pero tiene el inconveniente de que no funciona en emuladores y además su desarrollo se ha abandonado (mejor no decir nada de la nueva versión de PAlib: la instalé y cuando todo dejó de funcionar me dio un soponcio y no tiré el ordenador por la ventana porque... es caro [+furioso])

Es igual que efs en cuanto a escritura, salvo que con efs tienes el espacio fijo y no lo puedes ampliar. Funciona, como ya he dicho, en ideas. No está abandonado, y si no te funciona es porque has liado algo, yo tengo la última versión de libfat y va como siempre (y no tiene nada que ver con palib).
negatus escribió:3.- Se puede alternar entre ambas mediante el chdir EFS: y chdir FAT: pero no tengo muy claro si hay que iniciar FAT (supongo que sí pero todavía no he llegado al punto de usar ambas).

Por lo que se, es así.
negatus escribió:Hasta ahí lo que sé. Lo que no sé es si es posible trabajar con ficheros con datos binarios porque hasta la fecha sólo he podido trabajar en modo texto. La cuestión es que si trabajas con variables struct de cierta complejidad es comodísimo escribirlas y leerlas directamente en el fichero y no andar haciendo conversiones con el texto leído y llenando variables.

fopen("archivo.algo","wb");
fopen("archivo.algo","rb");
etc.


Saludos.
Vaya, observo que no me expliqué bien, lo que pasa por no querer extenderme mucho.

Quería decir que en modo FAT se pueden escribir ficheros, sí, pero no puedo usar emulador. En modo EFS sí que puedo usar emulador (cierto que no he conseguido que el ideas me funcione con .nds, supongo que por torpeza mía) pero no puedo escribir datos en binario, y en modo texto... en el ejemplo de las efslib da la impresión de que sí, pero me parece que no. Al menos, los datos que se escriben en el fichero no los "recuerda" en la siguiente ejecución y para mi aplicación, eso es imprescindible.

En cualquier caso asumo la posibilidad de que me haya equivocado en el uso de las funciones (en lo de la actualización de las PAlib lo doy por seguro, en caso contrario las estaría usando). En fin, seguiré intentándolo, con perseverancia al final acabaré consiguiéndolo pero tenéis que concederme que el uso de ficheros en este entorno es mucho más farragoso que con sistemas operativos al uso. Si al final lo consigo publicaré un tutorial con todas las posibilidades de utilización con las que he tenido que lidiar y que me han provocado tantos dolores de cabeza.

Gracias por vuestra ayuda y colaboracion. [bye]
Pero es que ningún emulador permite escritura con FAT (o EFS, que es lo mismo). Igual lo almacena de forma temporal, eso ya no lo se. Y en el ideas tienes que marcar en la configuración una opción especial para que EFS funcione usando la rom de gba. FAT en el ideas funciona, pero tienes que parchear con el dldi del r4 o el acekard el nds, marcarlo en las opciones, y tener en cuenta que la "raíz" de la tarjeta es la carpeta con el nds.
ANTONIOND escribió:Pero es que ningún emulador permite escritura con FAT (o EFS, que es lo mismo). Igual lo almacena de forma temporal, eso ya no lo se. Y en el ideas tienes que marcar en la configuración una opción especial para que EFS funcione usando la rom de gba. FAT en el ideas funciona, pero tienes que parchear con el dldi del r4 o el acekard el nds, marcarlo en las opciones, y tener en cuenta que la "raíz" de la tarjeta es la carpeta con el nds.


Precisamente a eso me refiero cuando digo lo engorroso que es. Cualquier entorno de programación al uso permite trabajar con ficheros, sin mayores limitaciones, en el sistema operativo utilizado, amén de proveer de una serie de inspectores de variables, puntos de ruptura, ejecución paso a paso, etc. que el entorno devkitpro-palib-Programmers Notepad (o similar) no tiene, por lo que tenemos que hacerlo "a mano" con el consiguiente aumento en el tiempo de desarrollo. Y que conste que nunca agradeceré lo suficiente el que al menos exista un entorno de programación libre para poder desarrollar en esta pequeña maravilla y aseguro que, si tuviera el tiempo suficiente (y los conocimientos, para que vamos a mentir) para adentrarme en sus entresijos, intentaría añadir dichas funcionalidades. Quizá sea mucho pedir que los próximos desarrollos en el entorno fueran en ese sentido, pero pedir es gratis ;)

De todos modos os agradezco a amchacon y a ti, antoniond, la colaboración y a ti especialmente la presteza en las contestaciones. Así da gusto.

[beer] y [bye]
5 respuestas