Anuncios Google

OSLib - Manejo de archivos

Tutoriales Avanzados Homebrewes

Hoy aprenderemos a manejar los archivos, es decir, aprenderemos a copiar/escribir/borrar un archivo mezclando las librerías oslib con las librerías pspsdk. Mezclar estas librerías no supone que entre ellas haya errores, todo lo contrario te ayudan ha hacer funciones que la otra librería no puede.

Autor: Dioni0396.

Muchos de vosotros, seguramente os interese hacer un aplicación que coja un archivo y lo copie, o que guarde la puntuación mas alta, pues no temáis hoy aprenderemos eso y mucho más. Empecemos:

Abriendo/Escribiendo en un archivo:

//Cargaríamos nuestras librerías como siempre.
//Y en algún momento de nuestro código queremos que haga esa acción de escribir.
//Recomiendo no poner estas funciones en un while, mejor en una sentencia.
if(osl_keys->pressed.circle){
	FILE *Datos; //Primero debemos crear un puntero con el tipo de Dato: FILE, esto es esencial.
 
	//Bien, Datos = fopen("Nombre_archivo.extension","Modo");
	//Eso de arriba es un modelo de ejemplo, no es la función real. Os explico que hay que poner 
	/* En el primer argumento el archivo y su extensión
	 * En el segundo el modo, los modos que existen son:
	"r" - Modo lectura.
        "w" - Modo escritura.
        "a" - Modo adición. Este modo lo que hace es poner en una linea mas abajo del texto que haya lo que tu quieras
        "r+" - Lectura/Escritura. Los datos pre-existentes se conservan.
        "w+" - Lectura/Escritura. Los datos pre-existentes se eliminan.
        "a+" - Lectura/Escritura. Los datos pre-existentes se conservan.
        "rb" - Lectura, datos del tipo binario.
        "wb" - Escritura, datos del tipo binario.
        "ab" - Adición, datos del tipo binario.
        * Recordad que siempre, el modo tiene que ir entrecomillas ("").
        */
    Datos = fopen("Puntos.txt","w");
    //Bien, ahora tenemos que escribir, el modelo a usar seria así: fprintf(Archivo,Texto)
    //En Texto, no puede haber otra cosa nada mas que datos con puntero char, si no son char el compilador dará error
    fprintf(Datos,"60");
    //Por ultimo cerramos
    fclose(Datos);
}

Bien, ya tenemos nuestro archivo con nuestro texto, o en este caso número. Así de sencillo es escribir, y esto sirve para casi todos los archivos, excepto binario (Si sabes binario no hay problema).

Copiando un archivo:

//El otro día, encontré una función interesante de copiado de archivos, tras experimentarlo vi que era fácil de aprender
//y por eso os lo voy a exponer
//Primero cargamos un buffer de 128 Kb
char write_buffer[128*1024];
//Ahora prestad atención a la función
int write_file(const char *Archivo, const char *Direccion_a_copiar) //Creamos una función
   {
      int fdin; //Creamos unas variables
      int fdout;
 
 
      fdin = sceIoOpen(Archivo, PSP_O_RDONLY, 0777); //Abrimos el archivo con sceIoOpen, esta función abre cualquier archivo, recomiendo usarlo tal y como esta ahí, no cambiéis los parámetros.
      //Necesitareis cargar antes la librería <pspkernel.h> y <pspdebug.h>
      if(fdin >= 0)
         {
 
            int bytesRead = 1;  //Si lo ha leído creamos una variable que nos de valor 1, como un Si.
 
 
            fdout = sceIoOpen(Direccion_a_copiar, PSP_O_WRONLY | PSP_O_CREAT, 0777); //Con la otra variable crea el otro archivo.
            if(fdout < 0)
               {
                  //En caso de fallo...
                  pspDebugScreenPrintf(" No se pudo abrir %s\n", Direccion_a_copiar);
                  return -2;
               }
 
 
            bytesRead = sceIoRead(fdin, write_buffer, sizeof(write_buffer)); //Hacemos que la variable lea el archivo con el buffer que previamente hemos creado
 
 
            while((bytesRead > 0) && (fdout >= 0)) //Si todo ha cargado bien...
               {
                  sceIoWrite(fdout, write_buffer, bytesRead); //Escribimos
                  bytesRead = sceIoRead(fdin, write_buffer, sizeof(write_buffer)); //Leemos que todo esta bien
                  //Si hemos terminado de copiar nos salimos del bucle
               }
 
            if(fdout >= 0)
               {
 
                  sceIoClose(fdout); //Cerramos el archivo
               }
 
            if(fdin >= 0)
               {
 
                  sceIoClose(fdin); //Cerramos el archivo
               }
         }
      else
         {
 
            pspDebugScreenPrintf(" No se pudo abrir %s\n", Archivo); //Si lo ha leído bien no entrara a esta sentencia
            return -1;
         }
 
 
      return 0;
 
   }

Con esto, se nos copiaría el archivo a nuestra ruta que deseemos.

Borrando un archivo/carpeta:

//Esto es sencillo, para borrar un archivo usamos esto:
sceIoRemove(const char * Ruta_Archivo) //Con poner la ruta, lo borrara todo.
//Para borrar una carpeta usamos:
sceIoRmdir(const char * Ruta_Carpeta) //Borrara la carpeta y su contenido

Renombrando un archivo:

//Sencillisimo:
sceIoRename(Nombre_Antiguo,Nombre_Nuevo)

Esto es todo por hoy, si tienen dudas coméntenlas.

4.157895
Tu voto: Ninguno Votos totales: 4.2 (38 votos)

Anuncios Google

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de Chimecho

Ejem...

Disculpa, pero esto:

FILE *Datos;

no "llama a un puntero" (las que se llaman son las funciones), lo correcto sería decir "crea un puntero" ya que las funciones son las que se llaman, y FILE no es una calisificación, es un Tipo de dato.

Edito: Una cosa más, si fopen no puede abrir el archivo dará error al tratar de escribir, lo correcto sería comprobar que luego del fopen el puntero Datos no sea igual que NULL, si lo es, quiere decir que hubo un error al abrir el archivo y se debería manejar eso.

Saludos.



PSP FAT [5.00 M33-6] [6.60 ME] [Hard Moded] / Nintendo Wii [4.1U] [cIOS Hermes] [D2X cIOS] / iPhone 3G [4.2.1] [BB 05.13.04] [redsn0w] / iPod Touch 4 [6.1] [evasi0n]

07/05/10: Tuve el placer de llamarle con todo derecho "N00B" a molotovi xDDD

Recuerda: Sé el intérprete -_-

Imagen de Dioni0396

Claro, eso

Sobre lo el Edito:

Claro, eso seria si exprimes, esto es lo basico, es decir yo enseño la funcion, como se maneja y tal pero no enseño a como decirse que si falla haga X cosa, que aparte, en la funcion write file hay un ejemplo practico de que hace cuando no puede abrirlo.

Sobre lo primero:

Si, tienes razon, enseguida lo edito.

Imagen de Chimecho

Rayos

Se me resbaló el dedo y escribí mal clasificación jajaj

Imagen de sting18

Lo que te preocupa jajajaja,

Lo que te preocupa jajajaja, por sierto dioni en este tipo de cosas siempre hay que hacer algun delay para evitar errores como cuelgues o pantallas negras.


Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.