Copia de archivos binarios

3 minutos de lectura

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?

  • 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

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

avatar de usuario
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


¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad