Bennu Game Development

Foros en Español => Mesa de Ayuda => Topic started by: Yawin on September 19, 2013, 08:07:46 PM

Title: Copiar fichero
Post by: Yawin on September 19, 2013, 08:07:46 PM
¡Hola a todos!
Continúo con mi motor RPG y, el caso es, que tengo un problemilla. Necesito copiar un fichero. Pero no es un simple fichero que pueda abrir, recoger el contenido y cerrar para volcar lo recogido en un nuevo fichero. Es una base de datos de SQLite.


¿A alguno se le ocurre cómo podría hacerlo?
Title: Re:Copiar fichero
Post by: Rein (K´)ah Al-Ghul on September 22, 2013, 04:37:04 PM
usando el comando del sistema operativo para copiar ?
Title: Re:Copiar fichero
Post by: Drumpi on September 26, 2013, 03:48:55 PM
Pues si quieres hacerlo con Bennu, es abrirlo en modo lectura, abrir un archivo de copia en el destino en modo escritura, e ir byte a byte. Da igual que sea un fichero de BBDD, un ejecutable o el Quijote en verso, un fichero es un fichero y una copia tiene exactamente los mismos bytes en su interior. No conozco ningún formato cuyo contenido dependa directamente del nombre o ubicación que se le  ponga.

Un caso aparte es que quieras darle los mismos permisos y atributos (lectura, escritura, oculto...) que el original, pero eso ya depende del SO en el que estés, y tendrás que hacerlo a mano, bien con las propiedades o usando comandos del sistema.

O puedes usar el método de Rein, al fin y al cabo, los ficheros de BBDD se crearon para ser copiados y trasladados entre sistemas :P
Title: Re:Copiar fichero
Post by: Yawin on September 29, 2013, 09:38:02 PM
O sea que si abro y copio byte a byte no me cargo nada?
Es que estoy por hacer un mod_yawin.dll que incluya mis fórmulas mágicas que nunca encuentro y acabo creando yo (como esta, for exampol).
Title: Re:Copiar fichero
Post by: Drumpi on October 07, 2013, 11:31:58 PM
Haz la prueba. Copia la base de datos con tu código y sustituye la original por esa copia (obviamente, no borres la original, por si acaso :D), a ver si esa BBDD sigue fncionando.
Pero ya digo, yo lo usé para copiar un FPG comprimido a un fichero sin comprimir: es decir, lo abrí con O_ZREAD y lo guardé en otro con O_WRITE, y obtuve el mismo FPG sin compresión y sin crear el algoritmo de descompresión :LOL:

Pero lo dicho, debes ir BYTE a BYTE (para evitar problemas de big y little endian) y el nuevo fichero no va a tener los permisos de lectura/escritura/ejecución del original, por si vas a leer un fichero de sólo lectura o con permisos exclusivos para el administrador.
Title: Re:Copiar fichero
Post by: kim-elet-o on October 10, 2013, 12:03:06 PM
Y una cosa que no se si sera obvia, sobretodo cuando estes haciendo la copia del fichero de BBDD, no operes con la BBDD.


Title: Re:Copiar fichero
Post by: Yawin on October 10, 2013, 08:39:34 PM
xDDD Creo que es obvio y tal. De hecho lo que hago es, cierro la bd, la borro y hago una copia de la original. De esa forma puedo resetear la partida sin tener que tener tablas duplicadas o cosas así.


Aún no he tenido tiempo de ponerme a esto, así que avisaré cuando tenga algo.
Title: Re:Copiar fichero
Post by: Yawin on November 12, 2013, 07:36:23 PM
Vale, ahora que he tenido tiempo lo he programado y me ha funcionado. dejo aquí mi función por si a alguien le viene bien:
function fcopia(string origen, string destino)
private
int pfich,pfich2;
int dato;
end
begin
pfich=fopen(origen,0);
pfich2=fopen(destino,2);

repeat
fread(pfich,dato);
fwrite(pfich2,dato);
until(feof(pfich));
end
Title: Re:Copiar fichero
Post by: Drumpi on November 18, 2013, 04:41:06 PM
Como te dije, te recomiendo que "dato" sea de tipo BYTE en lugar de INT, por aquello de los indios grandes y pequeños :D
(Big y Little endian).

Y ten cuidad con los ficheros vacíos ;)