Копирование бинарных файлов - PullRequest
6 голосов
/ 10 марта 2011

Я пытаюсь выяснить, как копировать двоичные файлы из одного места в другое .exe-файлы.Кажется, я не могу найти никаких решений для изучения.

Я использую Windows.Какой лучший способ сделать это?

Ответы [ 6 ]

6 голосов
/ 10 марта 2011

Что вы имеете в виду «лучший путь»? Я думаю, что это самый простой способ ... надеюсь, это то, что вы имели в виду:)


fopen входные и выходные файлы в двоичном режиме

FILE *exein, *exeout;

exein = fopen("filein.exe", "rb");
if (exein == NULL) {
    /* handle error */
    perror("file open for reading");
    exit(EXIT_FAILURE);
}
exeout = fopen("fileout.exe", "wb");
if (exeout == NULL) {
    /* handle error */
    perror("file open for writing");
    exit(EXIT_FAILURE);
}

fread и fwrite

size_t n, m;
unsigned char buff[8192];
do {
    n = fread(buff, 1, sizeof buff, exein);
    if (n) m = fwrite(buff, 1, n, exeout);
    else   m = 0;
} while ((n > 0) && (n == m));
if (m) perror("copy");

и, наконец, закройте файлы

if (fclose(exeout)) perror("close output file");
if (fclose(exein)) perror("close input file");

Веселись!

2 голосов
/ 10 марта 2011

Убедитесь, что вы открываете файлы с параметром O_BINARY, если вы используете open() и файловые дескрипторы, или с буквой "b" в строке режима, если вы используете fopen().Обратите внимание, что O_BINARY не является стандартным, кроме Windowsтем не менее, вы можете рассматривать его (или определять) как 0 в Unix, и все будет хорошо.Если вы используете чистый Windows API, убедитесь, что вы делаете то же самое - убедитесь, что вы указываете, что файл обрабатывается как двоичный файл.

1 голос
/ 10 марта 2011

В Windows есть CopyFile API (если вы не против конкретной платформы).В наши дни нужно быть осторожным, чтобы убедиться, что у вас есть права на запись в область назначения.

0 голосов
/ 29 октября 2013
#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;
}
0 голосов
/ 04 апреля 2012

Вы можете использовать функцию «dos.h» для операций ввода-вывода низкого уровня.Следующий код иллюстрирует их использование.Надеюсь, это будет полезно

#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);
}
0 голосов
/ 10 марта 2011

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...