Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.07.17;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.008 c
1-55551
Mishenka
2003-07-06 17:37
2003.07.17
Как обработать сразу все компоненты в GroupBox?


1-55612
Alex_DM
2003-07-03 16:57
2003.07.17
Как вынуть из DLL содержимое ДИНАМИЧЕСКОГО массива ?


1-55581
Jurmich
2003-07-03 10:20
2003.07.17
QuickReport


3-55418
AkaSaint
2003-06-21 15:36
2003.07.17
TDataSetProvider.UpdateMode = upWhereKeyOnly не действует


14-55798
VEG
2003-06-29 12:04
2003.07.17
Массивы в Си





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский