IPB
ЛогинПароль:

> 

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> работа с файлами через fp в win, path -> SearchRec
сообщение
Сообщение #1


Человек
*****

Группа: Пользователи
Сообщений: 1 050
Пол: Мужской
Реальное имя: Станислав

Репутация: -  3  +


Добрый день!
Надо написать утилитку на работу с файлами, но никак не получается ...
Вопрос в следующем: как имея адрес файла получить его "SearchRec", в частности Attr...
заранее благодарен.


OS: winXP.
компилятор: fpc 2.2.0, mode objfpc.
библиотеки: dos.


--------------------
Спасибо!
Удачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Человек
*****

Группа: Пользователи
Сообщений: 1 050
Пол: Мужской
Реальное имя: Станислав

Репутация: -  3  +


вобщем написать то я написал и даже откомпилировал smile.gif
но вот не задача она работает не как я хочу( , а я хочу всего-лишь найти все файлы которые не удается прочитать начиная с рабочей директории...
то, что у меня получилось:

{$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;

begin
workdir:=getworkdir(); //сохраняем рабочую директорию
getunread(workdir); //ищем
ChDir(workdir); //восстанавливаем дирректорию
end.



заранее благодарен.

upd
прошу прощение за комментарии на английском, сейчас тестирую несколько новых IDE, поэтому дабы избежать проблем с кодировкой...

upd2
добавлены комментарии по алгоритму..

Сообщение отредактировано: compiler -


--------------------
Спасибо!
Удачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
compiler   работа с файлами через fp в win   10.04.2008 1:43
volvo   Ты про это: {$mode objfpc} uses dos; var Fi…   10.04.2008 1:50
compiler   Ты про это ?да, спасибо... только у меня возникает…   10.04.2008 2:17
volvo   DosError = 18 - значит "искомые файлы (при по…   10.04.2008 2:49
compiler   Огромное спасибо!   10.04.2008 3:05
compiler   вобщем написать то я написал и даже откомпилировал…   10.04.2008 20:21
volvo   Так... А теперь подробнее - что именно у тебя не п…   10.04.2008 21:14
compiler   Так... А теперь подробнее - что именно у тебя не п…   10.04.2008 21:23
volvo   Что значит "не удается прочитать"? Те фа…   10.04.2008 21:34
compiler   Что значит "не удается прочитать"? Те фа…   10.04.2008 21:47
volvo   У тебя GetDir возвращает текущую директорию... ГДЕ…   10.04.2008 22:33
compiler   Хм... Так тебе что, рекурсивный поиск по всему дис…   11.04.2008 1:14
volvo   да, только не по всему, а начиная с текущей директ…   11.04.2008 2:02
compiler   огромное спасибо, всё тайное стало явным... или не…   11.04.2008 2:38
volvo   Ты никогда в консоли не набирал DIR, и не видел …   11.04.2008 3:05
compiler   Ты никогда в консоли не набирал DIR, и не видел …   12.04.2008 22:34


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 8.09.2025 9:12
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name