Добрый день! Надо написать утилитку на работу с файлами, но никак не получается ... Вопрос в следующем: как имея адрес файла получить его "SearchRec", в частности Attr... заранее благодарен.
вобщем написать то я написал и даже откомпилировал но вот не задача она работает не как я хочу( , а я хочу всего-лишь найти все файлы которые не удается прочитать начиная с рабочей директории... то, что у меня получилось:
{$mode objfpc} uses dos; const SLASH ='\'; var workdir: string;
function getworkdir():string; {return work directory} var workdir: string; workd: word; { use as zerro:) } begin getdir(workd, workdir); getworkdir := workdir end;
function getname(const sr:SearchRec):string; {SearchRec -> file name} begin getname := sr.name; end;
function getatr(const sr:SearchRec):longint; {SearchRec -> attr} begin getatr := sr.attr; end;
function ifdir(const path:string):boolean; {if it's directory} function getattr(const path:string):word; {Path -> attr} var f:file; begin assign(f, path); GetFAttr(f, result); end; begin ifdir := getAttr(path) = directory; end;
function ifread(const str:string):boolean; {is file can be read? if file is directory then false result print} var f:file; begin ifread:=false; if not ifdir(str) then begin assign(f,'str'); {$I-} reset(f); {$I+} if IOResult <> 0 then begin writeln('-', str); readln; read; end else begin ifread:=true; writeln('+', str); readln; read; end; end; end;
procedure getunread(const fw:string); {print unread files function change work directory!} var sr:SearchRec; begin FindFirst('*', AnyFile, sr); //все файлы, типа инициализации ifread(fw); //проверяем на доступность переданный файл FindNext(sr); //получаем следующий файл if doserror = 18 then //если в директории еще есть файлы? if getworkdir <> workdir then ChDir ('..'+SLASH) //нет. переходим на каталог выше else if sr.attr = directory then begin //обнаружена директория, переходим в нее chdir(fw+getname(sr)+SLASH); getunread(fw+getname(sr)+SLASH); end else ifread(getname(sr)); //обнаружен файл, проверяем его end;