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

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


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

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

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


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


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


--------------------
Спасибо!
Удачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
compiler
сообщение 10.04.2008 16:21
Сообщение #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 - 10.04.2008 17:32


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

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


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

 



- Текстовая версия 18.07.2025 14:58
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"