Kopiowanie bez CopyFile();

0

No wiec zeby było wszystko jasne. Chce skopiowac jakis plik. Napisalem taka procedurke:

FILE *fp1, *fp2; char c;

if ((fp1 = fopen("C:\Bl.exe", "r")) == NULL) {
fprintf(stderr,"blad otwarcia pliku do odczytu");
return 0;
}else printf("Otworzono plik do skopiowania...\n");

if ((fp2 = fopen("C:\Bl_copy.exe", "w")) == NULL ) {
fprintf(stderr, "blad otwarcia pliku do zapisu\n");
return 0;
}else printf("Otworzono plik do zapisu...\n");

while ((c = fgetc(fp1)) != EOF) {
if (putc(c, fp2) == EOF) {
fprintf(stderr, "blad zapisu pliku\n");
return 0;
}
}

if (ferror(fp1) != 0 ) {
fprintf(stderr,"blad czytania pliku");
return 0;
}

Dziala, poprawnie, tyle ze problem w tym ze kopiuje tylko pliki textowe. Co mam zrobic zeby kopiowal pliki binarne (tak jak napisane). Nie dzial to, a nie chce uzywac funkcji CopyFile();

0
#include <stdio.h>
#include <io.h>

#define defbufsize 2048

void copyfile(char* srce,char* dest,unsigned bufsize=defbufsize){
  file* fs=fopen(srce,"rb");
  file* fd=fopen(dest,"w+b");
  void* buf=malloc(bufsize);
  long size=filelength(fileno(fs));
  while(size){
    unsigned toread=bufsize;
    if(size<toread)toread=unsigned(size);
    size-=toread;
    fread(buf,toread,1,fs);
    fwrite(buf,toread,1,fd);
  }
  free(buf);
  fclose(fd);
  fclose(fs);
}

Taki najprostszy szkielet, bez sprawdzania błędów i/o i przydzialu pamieci;

1 użytkowników online, w tym zalogowanych: 0, gości: 1