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() |
|
|