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

Вниз

Объясните, где ошибка?   Найти похожие ветки 

 
Kolya   (2002-06-30 00:45) [0]

function TForm1.GetDirs(dir:string):tstringlist;
var
ts: TSearchRec;
begin
result:=tstringlist.create;
if findfirst(dir+ "*", fadirectory,ts)=0 then
repeat
if (ts.name <> ".") and (ts.name <> "..") then
result.add(ts.name);
until findnext(ts)<>0;
findclose(ts);
end;

по идее фунция должна была бы показывать только папки, но она выдает файлы и папки. Что надо изменить?
Спасибо.


 
Anatoly Podgoretsky   (2002-06-30 01:23) [1]

Это не ошибка, выдаются все обычные файлы + папки, как ты заказал
Надо анализировать атттриюут и брать только папки, игнорируя обычные файлы, кроме того у тебя есть еще ошибка, покажет не все папки, например не покажет read only, hidden таковы у тебя флаги, надо заменить на faAnyFile


 
kull   (2002-06-30 02:07) [2]


> Anatoly Podgoretsky © (30.06.02 01:23)

А зачем в параметре поиска тогда нужен атрибут fadirectory?


 
Aleks1   (2002-06-30 03:47) [3]

kull © (30.06.02 02:07)
Для того, чтобы функция поиска файлов искала еще и директории (каталоги, папки, мамки , и т.п.)


 
Юрий Зотов   (2002-06-30 07:17) [4]

Еще момент - современные Win32 "знают" еще и "дедовский" каталог (три точки). При проверке, пожалуй, стоит учесть и это. В итоге получаем примерно следующее:

if (ts.Attr = faDirectory) and (ts.name[1] <> ".") then ...


 
MBo   (2002-06-30 08:57) [5]

надежнее всего проверка
if ((ts.Attr and faDirectory)= faDirectory) and ...
поскольку простая проверка на равенство подведет, например, для скрытой директории


 
Юрий Зотов   (2002-06-30 09:14) [6]

Вообще - да, но не в данном случае.
Он не ищет скрытые, read-only и пр. директории, поэтому у него возможно либо равенство, либо не директория. И ничего другого.


 
Anatoly Podgoretsky   (2002-06-30 12:23) [7]

kull © (30.06.02 02:07)
Ты видишь что у меня это обозначено жирным + папки

Юрий Зотов © (30.06.02 07:17)
Не согласен, надо все таки проверять как у автора "." и ".." отдельно, иначе не попадут каталоги .ХХХ, ну и про точное равенство аттрибутов MBO указал, конечно можно согласиться с товоим доводом, что ему нужны только обычные каталоги, но я думаю, что у него просто неточная постановка вопроса.

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


 
GobliNGuT   (2002-06-30 14:09) [8]

MBo:
>>надежнее всего проверка
>>if ((ts.Attr and faDirectory)= faDirectory) and ...
>>поскольку простая проверка на равенство подведет, например, >>для скрытой директории
Вот мой вариант проверки, меня он не подводил. В этом варианте проверяется только наличие флага каталога, а остальные - неважно.
А перед условием стоит искать все файлы. И этим условием фильтровать нужное.

if (sr.Attr and faDirectory)<>0 then ...

И будет все ...


 
Юрий Зотов   (2002-06-30 17:59) [9]

> Насчет "..." каталогов

Это "родитель родителя". Нынешние Win32 такую запись понимают. Не знаю, хранится ли такая ссылка в самом каталоге, но во всяком случае в командной строке это срабатывает - именно так, как сказано в документации. Поэтому надежнее учесть.

Что же касается остального, то вся эта дискуссия не стоит и выеденного яйца - проверять битовые флаги, надеюсь, умеют все. Причем с учетом условий задачи.


 
Anatoly Podgoretsky   (2002-06-30 18:15) [10]

Юрий Зотов © (30.06.02 17:59)
Теперь понял, что ты имел ввиду, это относится к шеллу, возврат на несколько уровней выше по количеству точек


 
Kolya   (2002-07-01 01:25) [11]

Спасибо огромное, замечательно, теперь все понятно.. Это я не дочитал справку и думал, что параметр fadirectory выдаст только папки.



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

Форум: "Основная";
Текущий архив: 2002.07.15;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.012 c
3-47207
KIR
2002-06-15 13:51
2002.07.15
Как ячейке DBGrid a вывести текст в несколько строк


1-47367
DoommY
2002-07-02 07:52
2002.07.15
Как поместить в список все компаненты на форме (имена, заголовки)


3-47211
Eraser
2002-06-14 18:32
2002.07.15
Активная строка в DBCtrlGrid


1-47411
AL2002
2002-06-30 22:14
2002.07.15
Нажития клавиш


3-47061
Ptr
2002-06-18 11:49
2002.07.15
InterBase DataBase





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский