Estoy tratando de averiguar cómo copiar archivos binarios de un lugar a otro .exe. Parece que no puedo encontrar ninguna solución para aprender.
Estoy usando Windows. ¿Cuál es la mejor manera de hacerlo?
Estoy tratando de averiguar cómo copiar archivos binarios de un lugar a otro .exe. Parece que no puedo encontrar ninguna solución para aprender.
Estoy usando Windows. ¿Cuál es la mejor manera de hacerlo?
Windows tiene un API de copia de archivo (si no le importa ser específico de la plataforma). Una cosa que debe tener cuidado en estos días es asegurarse de tener permisos para escribir en el área de destino.
Muchos problemas: ¿Por qué dividir el código en 2 funciones separadas que usan diferentes API? Tipo int
es inapropiado para un tamaño de archivo (aunque en Microsoft Windows, int
y long
tienen el mismo tamaño…) No hay prueba para fopen()
o open
falla. ninguna prueba para malloc()
falla. Falta el tercer argumento para open
con O_CREAT
bandera. Sin prueba en read
ni write
. No hay valor de retorno útil…
– chqrlie
18 de agosto de 2021 a las 10:20
#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *fp1,*fp2;
char c;
fp1=fopen("source file","rb");
if(fp1==NULL)
exit(1);
fp2=fopen("destination file","wb");
if(fp2==NULL)
exit(1);
while((c=fgetc(fp1))!=EOF)
fputc(c,fp2);
fclose(fp1);
fclose(fp2);
return 0;
}
Si bien esto podría no ser el mejor solución, al menos sería una solución correcta si c
se definió con el tipo int
.
– chqrlie
18 de agosto de 2021 a las 10:29
Mahesh Menia
Puede usar la función de ‘dos.h’ para operaciones de E/S de bajo nivel. El siguiente código ilustra el uso de ellos. Espero que sea útil
#include<stdio.h>
#include<dos.h>
#include<FCNTL.H>
#include<SYS\STAT.H>
void main()
{
char s_file[100],d_file[100],buf[512];
short char copy='y';
int in_handle,out_handle,flg,len;
printf("\nEnter File Name : ");
fflush(stdin);
gets(s_file);
printf("\nEnter Destination File Name : ");
fflush(stdin);
gets(d_file);
// open file for reading
in_handle=open(s_file,O_RDONLY | O_BINARY);
if(in_handle<0)
{
printf("\nSource File not Found... ");
}
else
{
// open file for writing
out_handle=open(d_file,O_CREAT|O_WRONLY|O_BINARY,S_IWRITE);
while((len=read(in_handle,buf,512))>0)
{
flg=write(out_handle,buf,len);
if(flg==-1)
break;
}
if(flg==-1)
{
printf("Unable to Create");
}
else
{
printf("File Created");
}
}
if(!(in_handle<0))
close(in_handle);
if(!(out_handle<0));
close(out_handle);
}
Si bien esto podría no ser el mejor solución, al menos sería una solución correcta si c
se definió con el tipo int
.
– chqrlie
18 de agosto de 2021 a las 10:29
http://www.cs.bu.edu/teaching/c/file-io/intro/
#include <ctype.h>
#include <stdio.h>
#define BUFSIZE 1024
int main(int argc, char **argv)
{
charmybuf[BUFSIZE] = { 0 }, *p = NULL;
FILE *ifd = NULL, *ofd = NULL;
ifp = fopen( argv[1], “r” );
ofp = fopen( argv[2], “w” );
assert(ifp!=NULL);
assert(ofp!=NULL);
while ( ( n = fread( mybuf, sizeof(char), BUFSIZE ,ifd) ) > 0 )
{
fwrite(mybuf, sizeof(char),BUFSIZE,ofd);
}
fclose(ifd);
fclose(ofd);
return 0;
}
Arrrgggg: comillas inteligentes !!! quien pensó en llamarlos inteligentes??? son CITAS TONTAS… y… sizeof(char)
por definición, es 1
– pmg
10 de marzo de 2011 a las 17:11
Qué quieres n
¿por? Nunca lo usas para nada.
– pmg
10 de marzo de 2011 a las 17:14
Es necesario especificar el modo binario (“rb” y “wb”) para que esto funcione correctamente en sistemas (como Windows) que distinguen entre texto y “ARCHIVO” binario; y está escribiendo basura si el archivo no es un múltiplo exacto de bytes BUFSIZE.
– David Gelhar
10 de marzo de 2011 a las 18:50
Debes publicar todo lo que hayas intentado, para que podamos tener una idea de cómo ayudar: esta es una operación bastante fácil en la mayoría de los lenguajes de programación.
– Jeff
10 de marzo de 2011 a las 17:14