Практика программирования (Бейсик, Си, Паскаль)



         

Задачи, советы и ответы - часть 6


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

Система QBasic не включает в свой состав функции или процедуры для работы с файловой системой MS-DOS, присущие алгоритмическим языкам более высокого уровня типа Си или Паскаля. Поэтому мы ограничимся тем, что из программы на Basic можно выполнить любую директиву операционной системы по оператору SHELL. Программа 7_07.bas решает поставленную задачу, однако имена файлов из текущего или указанного каталога остаются недоступными для последующей программной обработки.




Содержание  Назад  Вперед