Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.04.2009, 17:00   #1
m9ss
 
Регистрация: 14.12.2008
Сообщений: 9
По умолчанию Проблема с атрибутом faDirectory(FindFirst)

Есть программа, кусок кода ниже, делает она следующее - просматривает директорию программы и с помощью labels выводит сначала папки, а потом и файлы, причем на labels стоит обработчик кликов при условии что это файл а не папка. Все замечательно работает, пока я все это не запишу на CD диск. При запуске программы с диска папки почему то воспринимаются как файлы, т.е. все папки на диске попадают под условие search.Attr<>faDirectory, и я понять не могу косяк это в программе, или же атрибут неверно определяется из за самой Delphi.

Код:
if FindFirst(dir+'\*.*', faAnyFile, search) = 0 then
begin
  repeat
    if (search.Name<>'.') and (search.Name<>'..') and (search.Attr=faDirectory)
    then CreateLabels(search, true);
  until FindNext(search) <> 0;
FindClose(search);
end;
if FindFirst(dir+'\*.*', faAnyFile, search) = 0 then
begin
  repeat
    if (search.Name<>'.') and (search.Name<>'..') and (search.Attr<>faDirectory)
    then CreateLabels(search, false);
  until FindNext(search) <> 0;
FindClose(search);
end;
m9ss вне форума Ответить с цитированием
Старый 02.04.2009, 17:08   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

НУ во-первых, можно дополнительно проверить FileExist файл это или нет, а во-вторых, помоему там нужно что-то типа такого:
Код:
(search.Attr = (faDirectory and not faanyfile)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.04.2009, 17:12   #3
m9ss
 
Регистрация: 14.12.2008
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
НУ во-первых, можно дополнительно проверить FileExist файл это или нет, а во-вторых, помоему там нужно что-то типа такого:
Код:
(search.Attr = (faDirectory and not faanyfile)
ну если даже папки не попадают под условие (search.Attr=faDirectory)
то под условие faDirectory and not faanyfile я думаю тоже не будут попадать.
Так же заметил что если у папки допустим сменить ярлык, то даже без записи на диск она тоже воспринимается как файл, FileExist можно попробовать, если не найду другого решения.

P.S. Записывать пробовал разными способами и разными программами...
m9ss вне форума Ответить с цитированием
Старый 02.04.2009, 20:15   #4
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Нужно проверять как битовую маску:

(search.Attr and faDirectory) <> 0

(А на CD к атрибутам добавляется faReadOnly)
alexBlack вне форума Ответить с цитированием
Старый 03.04.2009, 09:59   #5
m9ss
 
Регистрация: 14.12.2008
Сообщений: 9
По умолчанию

Цитата:
Сообщение от alexBlack Посмотреть сообщение
Нужно проверять как битовую маску:

(search.Attr and faDirectory) <> 0

(А на CD к атрибутам добавляется faReadOnly)
Спасибо помогло.
m9ss вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
findfirst aesoem Общие вопросы Delphi 7 14.04.2008 17:06
FindFirst matus Помощь студентам 2 21.02.2008 19:34
ADOQueryGivBy.FindFirst azat БД в Delphi 5 25.01.2008 13:10
Проблема с FindFirst, как указать меняющийся путь? _SacreD_ Общие вопросы Delphi 12 26.12.2007 16:14