Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.17;
Скачать: CL | DM;

Вниз

Проблемы с поиском Файлов   Найти похожие ветки 

 
Diamond Dog ©   (2003-07-05 18:59) [0]

Есть такой код, для отображения файлов и директорий в определенной папке
procedure TForm1.ListDir(dir: String);
var
sr: TSearchRec;
begin
ListView1.Items.Clear;
if FindFirst(dir+"*", faAnyFile, sr) = 0 then
begin
repeat
if sr.attr = 16 then
ListView1.Items.Add.Caption:="["+sr.Name+"]"
else ListView1.Items.Add.Caption:=sr.Name;
until FindNext(sr) <> 0;
FindClose(sr);
end;

Но при отображении диска С:\, папка Program Files отображается без квадратных скобок и еще некоторые папки. Почему так происходит.


 
Anatoly Podgoretsky ©   (2003-07-05 20:25) [1]

Потому что sr.attr у этих папок <> 16


 
Aldor ©   (2003-07-05 20:33) [2]

if sr.attr = 16 then
следует заменить на
if sr.attr or 16 <> 0 then

Директория может быть, к примеру, еще и ReadOnly.


 
Aldor ©   (2003-07-05 20:37) [3]

if sr.attr = 16 then
следует заменить на
if sr.attr or 16 <> 0 then

Директория может быть, к примеру, еще и ReadOnly.

P.S. Вместо числа 16 лучше использовать конкретную именованную константу faDirecoty.


 
Anatoly Podgoretsky ©   (2003-07-05 20:45) [4]

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


 
Aldor ©   (2003-07-05 21:04) [5]

Прошу прощения за ГРУБЕЙШУЮ ошибку.

Писать следует
if sr.attr and 16 <> 0 then

а еще лучше
if sr.attr and faDirectory = faDirectory then


 
Anatoly Podgoretsky ©   (2003-07-05 21:11) [6]

Последняя строка самая верная


 
Diamond Dog ©   (2003-07-05 21:48) [7]

Большое спасибо за подсказку, но все же-почему так ?


 
Aldor ©   (2003-07-05 21:58) [8]

> Большое спасибо за подсказку, но все же-почему так ?

Потому что у Program Files, например, значение поля флагов равно $0011 ($0010 + $0001), то есть (faDirectory + faReadOnly), а значит равенство attr = 16 (или $0010 или faDirectory) ложно.



Страницы: 1 вся ветка

Текущий архив: 2003.07.17;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.017 c
14-55725
Dmitriy O.
2003-07-02 13:43
2003.07.17
Как в Delphi снять сразу все точки прерывания как в VBA.


14-55846
Kair
2003-06-30 09:52
2003.07.17
Кольцо Kair a


1-55559
Mishenka
2003-07-06 23:52
2003.07.17
Изменение значения в SpinEdit...


6-55686
zom
2003-05-12 17:21
2003.07.17
Открытие сетевого соединения. Какое событие вызывается?


14-55767
AndrewVolkov
2003-07-03 01:26
2003.07.17
DBLookupComboBox очистка поля