Текущий архив: 2002.07.15;
Скачать: CL | DM;
ВнизОбъясните, где ошибка? Найти похожие ветки
← →
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;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.01 c