Programación General > C/C++
como creo un executable con "wb"
m0skit0:
No te precipites, primero haz un programa que copie el contenido de un fichero a otro y luego ya vemos lo de concatenar fichero (que también es muy sencillo) ^_^
--- Cita de: "proxy_lainux" ---ues a mi lo que se me ocurre es partir len en partes de un byte "por ejemplo"... y hacer que fread vaya leyendo byte por byte... y por cada byte leido, mandarlo a fwrite y borrar la informacion del buffer para volver a leer otro byte y mandarlo a fwrite y asi continuamente hasta finalizar con el archivo, y asi de esa manera podria crear un buffer pequeño que vaya leyendo y escribiendo la informacion...
--- Fin de la cita ---
Sí, buena idea, pero dos cosillas:
* El for que has puesto no le veo mucho sentido... ¿De dónde sacas lo de 10000 :huh: ? Eso ya no vale, estás usando un buffer de 1 byte. Sería simplemente:
--- Código: C ---for (i = 0; i < len; i++)
* Un buffer de un byte sería demasiado pequeño a mi parecer, ya que habría que estar llamando a las funciones fread() y fwrite() una vez por byte, lo que ralentizaría mucho el copiado. Además, el SO lee generalmente el disco por sectores lógicos (512-1024-2048 bytes), y no por bytes, convendría usar un buffer igual o múltiplo que estas figuras para optimizar las llamadas a fread().
proxy_lainux:
hola
jeje.. :P lo de for como lo mencione, no tenia idea, pero me imagine algo asi para partir len en bytes... pero ya que me explicaste eso... no entiendo como podria ir copiando parte por parte.. mira este codigo que hice, me copia bien archivos menores de 1mb
--- Código: C ---#include <stdio.h>#include <string.h> int main(){ FILE *entrada;FILE *salida;unsigned long pos, i, len;unsigned char buf[1000000]; entrada = fopen("lie.tar.gz","rb"); pos = ftell(entrada);fseek(entrada,0,SEEK_END);len = ftell(entrada);fseek(entrada,pos,SEEK_SET); for(i = 0; i < len; i++){fread(buf,sizeof(buf),1,entrada);}close(entrada); salida = fopen("true.tar.gz","wb");fwrite(buf,len,1,salida);fclose(salida);}
y me imagino que para algo optimo, tendria que ir copiando de 512 kb a 1mb no?... y con este codigo he logrado copiar archivos que no sobrepasen 1mb... y creo que aqui es donde tengo que ir copiando mb por mb para ir escribiendo en fwrite no? ya que he intentado copiar archivos de mas de 10mb pero el buffer es muy pequeño
pero como podria decirle a fread que me lea 1000000 caracteres... que me los mande a fwrite ( me imagino que tendre que utilizar zeromemory o memset para borrar el buffer ) y como continuar leyendo con fread, para repetir todo hasta terminar de copiar el archivo...
se me ha ocurrido algo con while y con if... pero cuando continuo me encuentro con algun error :(
alguna idea?
salu2 :D
m0skit0:
--- Cita de: "proxy_lainux" ---mira este codigo que hice, me copia bien archivos menores de 1mb
--- Fin de la cita ---
:P ahí estás implementando una mezcla entre la primera y la segunda solución de las que te hablaba :bad:
--- Cita de: "proxy_lainux" ---tendria que ir copiando de 512 kb a 1mb no?
--- Fin de la cita ---
No exactamente, sino más bien copiar cachos de 512 bytes (por ejemplo) hasta completar el tamaño del fichero. Aunque yo usaría 2048 bytes (o 2 KB).
--- Cita de: "proxy_lainux" ---pero como podria decirle a fread que me lea 1000000 caracteres...
--- Fin de la cita ---
Eso no es solución. La próxima vas a querer más caracteres, y más y más...
--- Cita de: "proxy_lainux" ---me imagino que tendre que utilizar zeromemory o memset para borrar el buffer
--- Fin de la cita ---
No hace falta borrar el buffer, lo vas a sobreescribir ;)
--- Cita de: "proxy_lainux" ---se me ha ocurrido algo con while y con if
--- Fin de la cita ---
Ponlo para que lo veamos juntitos :D
--- Cita de: "proxy_lainux" ---alguna idea?
--- Fin de la cita ---
Hombre, yo ya sé hacerlo, incluso el concatenador de ficheros, pero la cuestión es que seas TÚ el que lo haga :P
proxy_lainux:
hola m0skit0
ahorita tengo varias cosas que hacer, y no voy a poder continuar por lo menos durante 15 dias mas o menos... asi que si no posteo algo es porque estare ocupado, pero espero me puedas seguir ayudando despues :good:
y gracias por la ayuda, mientras tratare de pensar en algo, ok
bueno, salu2 y nuevamente... gracias por la ayuda
nos vemos :D
Navegación
[*] Página Anterior
Ir a la versión completa