|
PSP newbie
Messages: 2
|
 help in function
i want to copy files to flash0 but it only copies one file and want to know how to copy instead of one file i want to copy 2 files or more
need help
#include <pspkernel.h> #include <pspdebug.h>
//ponemos nuestro programa en modo VSH PSP_MODULE_INFO("FlashWriter", 0x800, 2, 0); PSP_MAIN_THREAD_ATTR(PSP_THREAD_ATTR_VSH);
//para poner la ruta de origin y destination #define ORIGiN "ms0:/f/vshctrl.prx, ms0:/f/recovery.prx" #define ORIGiN "ms0:/f/recovery.prx" //"ms0:/put/here/the/route/to/archive.ext" //example ms0:/f/vshctrl.prx, ms0:/f/recovery.prx" #define DESTINO"flash0:/kd/vshctrl.prx, flash0:/kd/recovery.prx" //"flash0:/put/here/the/route/to/archive.ext" //example flash0:/kd/vshctrl.prx, flash0:/kd/recovery.prx //variable for utilizing like buffer char write_buffer[128*1024];
//function that realizes the copy of archive int write_file(const char *read_loc, const char *write_loc) { int fdin; //to manage the decriptor of archive origin int fdout; //for manage the descriptor of archivw destin //opens the archive origin fdin = sceIoOpen(read_loc, PSP_O_RDONLY, 0777); if(fdin >= 0) { //si se abrio el archivo origen, intentamos abrir el archivo destino, creandolo si no existe int bytesRead = 2; /*para controlar cuantos bytes se han leido del archivo origen y saber cuantos se van a escribir en el archivo destino, escribiremos la misma cantidad que hemos leido*/ //abrimos el archivo destino fdout = sceIoOpen(write_loc, PSP_O_WRONLY | PSP_O_CREAT, 0777); if(fdout < 0) { //si no se pudo abrir el archivo destino pspDebugScreenPrintf(" No se pudo abrir %s\n", write_loc); return -2; } /*leemos del archivo origen, guardamos lo leido en el buffer de escritura y la cantidad de bytes leidas en bytesRead*/ bytesRead = sceIoRead(fdin, write_buffer, sizeof(write_buffer)); //este ciclo se repetira mientras queden bytes por leer del archivo origen y se pueda escribir en destino while((bytesRead > 0) && (fdout >= 0)) { sceIoWrite(fdout, write_buffer, bytesRead); bytesRead = sceIoRead(fdin, write_buffer, sizeof(write_buffer)); }
if(fdout >= 0) { //si todo ha ido bien, entonces cerramos el archivo destino sceIoClose(fdout); }
if(fdin >= 0) { //cerramos el archivo origen sceIoClose(fdin); } } else { //si no se pudo abrir el archivo origen pspDebugScreenPrintf(" No se pudo abrir %s\n", read_loc); return -1; } //si todo ha ido bien llegaremos hasta aqui y devolvemos cero, indicando que todo ha sido correcto return 0; }
//funcion principal int main(int argc, char* argv[]) { pspDebugScreenInit(); int result; /*desasignamos la flash0 esto lo hacemos para luego reasignarla con los permisos de escritura */ result = sceIoUnassign("flash0:"); if(result < 0) { //si hubo error al tratar de desasignar la flash0 pspDebugScreenPrintf("Error desasignando la flash0"); } else { //reasignamos la flash con permisos de escritura result = sceIoAssign("flash0:", "lflash0:0,0", "flashfat0:", IOASSIGN_RDWR, NULL, 0); if(result < 0) { //si no se pudo asignar los permisos de escritura pspDebugScreenPrintf("Error asignando la flash0 para escritura"); } else { /*si todo ha ido bien llegamos a esta parte aqui es donde llamamos a la funcion que copia el archivo desde una ubicacion a otra */ pspDebugScreenPrintf("flashing......\n"); result = write_file(ORIGEN, DESTINO); if(result>=0) { //si no hubo errores en el proceso de escritura pspDebugScreenPrintf("done\n"); } } } //hemos terminado, pausamos unos segundos para poder leer los letreros sceKernelDelayThread(6000000);
//salimos al XMB sceKernelExitGame(); return 0; }
Dernière édition par chaar91 le 22 Oct 2010, 22:19, édité 1 fois.
|