C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Тем кто помнит С и DOS посвящается..., Копирование файлов!!!
Guest
Отправлено: 19.07.2004, 12:36


Не зарегистрирован







Привет народ. Нужно сделать программку копирования файлов под DOS. Ну значит использую я Turbo C++ 3.0. Аргументы берутся из коммандной строки. Вот собственно сама программка, довольно тривиальная:
CODE

#include <stdio.h>
#include <conio.h>
#include <iostream.h>

main(int argc, char* argv[])  // access command-line arguments
{
  FILE *in,*out;

  if ((in = fopen(argv[1], "rb")) == NULL)
  {
    fprintf(stderr, "Cannot open input file.\n");
    return 1;
  }

  if ((out = fopen(argv[2], "w+b")) == NULL)
  {
    fprintf(stderr, "Cannot open output file.\n");
    return 1;
  }
 int i = 0;
 while (!feof(in))
  {fputc(fgetc(in), out);
   i++;
  }

 clrscr();
 cout << i;
 fclose(in);
 fclose(out);
}


Но есть один глюк! При копировании, полученный файл имеет размер на 1 байт больше чем файл-источник. Т.е. дописывается признак конца файла (FF) в конец файла. Но мне такое и нафиг не нужно. Мне нужно один в один скопировать файл. Кто помнит как это делается??? Плиз...
AVC
Отправлено: 19.07.2004, 13:24


Ветеран

Группа: Модератор
Сообщений: 1583



QUOTE

Т.е. дописывается признак конца файла (FF) в конец файла. Но мне такое и нафиг не нужно.

Вы же сами его и дописываете своим циклом.

Вариант (как то так, давно не писал на TurboC++)
char c;
while (!feof(in))
{ c = fgetc(in);
if(in->flags & _F_EOF) break;
fputc(c,out);
i++;
}

Как мне помнится блоками копировать намного быстрее, а еще лучше заставить это делать операционку.
Shura
Отправлено: 19.07.2004, 14:27


Дежурный стрелочник

Группа: Участник
Сообщений: 45



это ну О-О-О-ЧЕНЬ тормозной метод. Лучше поищи в справке что-нибудь типа copyfile() или filecopy()

Вернуться в Вопросы программирования в C++Builder