#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 512
main(int narg, char **argv) {
FILE *f1,*f2;
int rd,wr;
char buf[N];
char namel[80],name2[80];
char *point;
if(narg < 2)
{ printf("\n He задано имя файла"); exit(0); }
strcpy(namel,argv[l]);
fl=fopen(namel,"rb");
if(fl==NULL)
{ printf("\n Файл %s не найден",namel); exit(0); }
point=strchr(namel, '. ');
if(point) {strncpy(name2,namel,point-namel};
name2[point-namel]=0x0; }
else strcpy(name2,namel); strcat(name2,".bak");
f2=fopen(name2,"wb");
do {
rd=fread(buf,l,N,fl);
wr=fwrite(buf,1,rd,f2); }
while (rd!=0 && rd == wr) ;
fclose(fl);
fclose(f2); }
Программа 7_07.pas
program reserve; uses Dos; const
N=512; var
fl,f2 : file;
rd,wr : word;
buf : array [1..N] of byte;
namel, name2 : PathStr;
dir : DirStr;
name : NameStr;
ext : ExtStr; begin
if ParamCount=0 then
begin writeln('He задано имя файла');
exit;
end;
namel:=ParamStr(1);
assign(f1,name1);
{$!-} reset(f1,l); {$I+}
if IOResult <> 0 then
begin writeln('Файл ',namel, ' не найден');
exit;
end;
fsplit(namel,dir,name,ext);
name2:=dir+name+'.bak';
assign(f2,name2);
rewrite(f2,1); repeat
blockread(fl,buf,N,rd);
blockwrite(f2,buf,rd,wr);
until (rd=0) or (rd <> wr) ;
close(fl);
close(f2);
end.
Задание 7.08. Выдача каталога на экран
Составить программу, которая извлекает из текущего каталога имена файлов с заданным расширением (например, *.pas) и выводит их на экран подобно директиве MS-DOS (dir *.pas), суммируя количество и длину обнаруженных файлов.
Совет 1 (QBasic)