Anuncios Google

¿Alguien que me ayude un poco?

Estoy intentando crear una 'función' simple para copiar archivos y directorios.

El problema radica en que no sé manejarme mucho en C... y, bueno, lo que sé es que hace falta abrir el archivo, leer X bytes de él, escribir esos bytes en el path especificado, y seguir hasta que no queden más bytes por leer. Pero, ¿cómo hago el bucle? ¿Cómo...?

Es que no tengo ni idea... :S

Gracias

PD: también me gustaría si me dejais la función, que me la explicaseis así por encima un poco, para enterarme de lo que hace...


http://www.mhypnok.blogspot.com/

Gracias a Dark_AleX, Total_Noob, VirtuousFlame, Coldbird, Codestation...


Anuncios Google

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 DeViaNTe

operaciones con archivos..

creo k he respondido mas de una vez esta duda, no recuerdo donde exactamente de este foro, pero weno, ahi va de nuevo!

int copiar_archivo(const char * src, const char * des, int ovw) {
	int fdsrc, fddes, bytes = -1;
	char buffer[1024*3]; int bufsize = sizeof(buffer);
 
	if (!fileexists(src) ) { return 0; }
	if ( fileexists(des) && !ovw ) { return 0; }
 
	fdsrc = sceIoOpen(src, PSP_O_RDONLY, 0777);
	if(fdsrc < 0) return 0;
	fddes = sceIoOpen(des, PSP_O_WRONLY | PSP_O_CREAT | PSP_O_TRUNC, 0777);
	if(fddes < 0) { sceIoClose(fdsrc); return 0; }
	bytes = sceIoRead(fdsrc, buffer, bufsize);
	while(bytes > 0) {
		sceIoWrite(fddes, buffer, bytes);
		bytes = sceIoRead(fdsrc, buffer, bufsize);
	}
	sceIoClose(fddes);
	sceIoClose(fdsrc);
	return 1;
}

Te faltará una función fileexists para saber si el archivo existe de destino.
(ovw es "overwrite"), pasas un 1 para sobreescribir, un 0 para no sobreescribir.

int fileexists(const char* fpath) {
	SceUID temp = sceIoOpen(fpath, PSP_O_RDONLY, 0777); 
	if(temp>=0){ sceIoClose(temp); return 1; }
	return 0;
}

Y recursivo con archivos... ahi te voy a dejar trastear un poco, no te lo voy a dar todo hecho...

	int filedesc = sceIoDopen(src); 
	if (filedesc<0) { return 0; }
	SceIoDirent ent; memset(&ent, 0, sizeof(SceIoDirent));
 
	while (sceIoDread(filedesc,&ent)) {
          .... lo k sea con ent ...
        }
        sceIoDclose(filedesc);

échale un ojo a SceIoDirent para saber que miembros tiene la estructura.

Un saludo. DeV


Actualmente desarrollando nuestra web y UXCode : http://www.gcrew.es

Imagen de dj51_Shura

jajaja

MUCHÍSIMAS GRACIAS!!!

ya mismo voy probando ;-)

Me ha venido bien todo, desde el fileexists hasta los demás ints... jeje...

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.