![]() |
![]() |
compiler |
![]()
Сообщение
#1
|
Человек ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 050 Пол: Мужской Реальное имя: Станислав Репутация: ![]() ![]() ![]() |
Добрый день!
Надо написать утилитку на работу с файлами, но никак не получается ... Вопрос в следующем: как имея адрес файла получить его "SearchRec", в частности Attr... заранее благодарен. OS: winXP. компилятор: fpc 2.2.0, mode objfpc. библиотеки: dos. -------------------- Спасибо!
Удачи! |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата я не понял зачем этот параметр У тебя GetDir возвращает текущую директорию... ГДЕ? На каком диске? Это и указывается первым параметром процедуры... При передаче 0 ты получишь текущую папку на диске, с которого запускалась программа, чтобы получить это для D:, надо передать 4...Хм... Так тебе что, рекурсивный поиск по всему диску с проверкой всех файлов, надо? Тогда поправляй процедуры вот так: // здесь readln-ы я убрал, чтоб не щелкать по enter-у постоянно... |
compiler |
![]()
Сообщение
#3
|
Человек ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 050 Пол: Мужской Реальное имя: Станислав Репутация: ![]() ![]() ![]() |
Хм... Так тебе что, рекурсивный поиск по всему диску с проверкой всех файлов, надо? да, только не по всему, а начиная с текущей директории... несколько вопросов по процедурам: зачем if (sr.name <> '.') and (sr.name <> '..') then begin? где можна прочитать о сравнивании attr с directory? я об этом (sr.attr and directory = directory)наверно ifdir() тоже надо переписывать.. да, а с str баг получился) -------------------- Спасибо!
Удачи! |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
да, только не по всему, а начиная с текущей директории... Ну, это не имеет значения в данном случае, рекурсия будет работать, начиная с того пути, который ты туда передашь, хоть корень диска, хоть что... Главное - чтобы параметр, передаваемый в getunread завершался слэшем...зачем
Затем, чтобы не перемещаться бесконтрольно по папкам туда-сюда... Ну, не ограничишь ты перемещение по '.', так и будешь ходить постоянно в одной и той же папке - это ж ссылка из папки на саму себя. И зачем тебе опять возвращаться в папку уровнем выше (через '..'), если ты только что оттуда пришел? Лишние действия убираем...if (sr.name <> '.') and (sr.name <> '..') then begin? где можна прочитать о сравнивании attr с directory? я об этом
(sr.attr and directory = directory)наверно ifdir() тоже надо переписывать.. А это не сравнивание... Никто не обещал, что в поле Attr будет храниться Directory в чистом виде (то есть, поле Attr не должно быть равно $10), в этом байте просто будет установлен бит xxx1xxxx, а как проверяется, установлен ли бит? Правильно, if value and mask = mask then ... Что и было сделано... А насчет ifdir - я просто не заметил его, да, там тоже надо менять, хотя по-моему было бы проще заменить функцию на дополнительный параметр для ifread: function ifread(const str:string; const ifdir: boolean = true): boolean;, а ниже - ..., опять же, не надо делать одну и ту же работу дважды, ты ж уже знаешь, папка это или нет, зачем еще раз проверять??? Добавлено через 13 мин. А можно пойти еще дальше, и вообще не вызывать ifread нигде, кроме как в ветке Else после проверки, папка ли это... Тогда тебе не надо ни функции ifdir(), ни дополнительного параметра... Если уж пришел в ifread() - значит, это файл. Сразу проверяй его и все... |
![]() ![]() |
![]() |
Текстовая версия | 18.07.2025 14:57 |