![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Маска папки [D5]
R © (2004-07-28 08:12:00)Если производить поиск файлов то тут все понятно,
для индентификации соответствия имени файла указанной
маске сообразуясь с правилами(*,? ...) можно использовать функцию MatchesMask или IsWild(RxLib)...,
но как быть с папками, какую функцию можно использовать?
GuAV (2004-07-31 20:48:00) [1]ЮрийК © (31.07.04 20:42) [43]
Зачем строить научные гипотезы?
Маска это маска, а атрибут это атрибут.
Маска * или *.* соответсвует всем файлам.
Атрибут faDirectory соотв папкам.
ЮрийК (2004-07-31 20:42:00) [2]Уточнение:
Если все директории, имеющиеся на диске, не будут содержать точек посередине, то поиск по маске "*." выдаст все эти директории. И только, то есть никаких файлов выдаваться не будет.
Требует проверки.
GuAV (2004-07-31 20:31:00) [3]
> Да там в позиции имени файла отведено три места ддя расширения.
Любопытно. У меня грузится win98. при выполнении autoexec.bat есть расширения, но когда загрузка завершилась их уже нет.
> Нет ни каких папок - это все файлы
> В Виндоус в файловой системе нет расширений
:) А также нет никаких файловых систем, разделов, ОСей, MBRов :) есть только массив из байтов на винте и в биосе, последний выполняется при загрузке и может "передать управление" предпоследнему :) Да и байтов тоже нет :)
ЮрийК (2004-07-31 20:13:00) [4]"По маске *. будут находится файлы, не содержащие в имени точку.
В том числе и директории, не содержащие в имени точку."
По первому предположению по файлам надо проверять.
По второму - скорее всего, будут находиться не все директории, а именно, имеющие точку посередине (пример "aa.bb").
Предположение (второе) :
Если все директории, имеющиеся на диске, не будут содержать точек посередине, то поиск по маске "*." выдаст все эти директории.
Anatoly Podgoretsky (2004-07-31 20:07:00) [5]GuAV © (31.07.04 19:23) [39]
Интересный факт. А есть ли они в файловой системе DOS?
Да там в позиции имени файла отведено три места ддя расширения. Формат 8.3
Расширение сейчас содержит декоративную функцию как в Юниксе и может использоваться шелом для поддержки ассоциаций.
По маске *. будут находится файлы, не содержащие в имени точку.
Нет в имена в которых только одна точка, при выводе ее не выводят, имя файла без точки по умолчанию содержит завершающую виртуальную точку.
GuAV (2004-07-31 19:23:00) [6]
> В Виндоус в файловой системе нет расширений
Интересный факт. А есть ли они в файловой системе DOS?
> По маске "*." будут находиться директории.
По маске *. будут находится файлы, не содержащие в имени точку.
В том числе и директории, не содержащие в имени точку.
ЮрийК (2004-07-31 18:24:00) [7]Предположение (наверное ошибочное) :
По маске "*." будут находиться директории.
Anatoly Podgoretsky (2004-07-30 17:48:00) [8]ЮрийК © (30.07.04 17:30) [35]
В Виндоус в файловой системе нет расширений
panov (2004-07-30 17:44:00) [9]>ЮрийК © (30.07.04 17:30) [35]
Одно и то же.
ЮрийК (2004-07-30 17:30:00) [10]И всё же, кто знает:
маски "*.*" и "*" одно и то же при поиске файлов/папок?
Fay (2004-07-30 17:15:00) [11]>> if (s<>'*') and (s<>'*.') and (s='*.mp3') then DoMp3();
А можно было
if ('*.mp3' <> '*.') and ('*.mp3' <> '*') and (s='*.mp3') then DoMp3();
8)
olookin (2004-07-30 17:03:00) [12][31] GrayFace (30.07.04 16:34)
Остальное шаманство в olookin[5]. По поводу if (s<>'*') and (s<>'*.') and (s='*.mp3') then цитирую Fay [16]:Не думаю, что человек, для которого проявление такой тупизны является нормой, смог бы сам завести анкету на форуме. Хотя я бы не был столь катигоричен.
Хм. Поясню. Ранее было что-то типа
if (s<>'*') and (s<>'*.') then begin
if s='*.tralala' then DoTralala();
if s='*.tratata' then DoTratata();
and so on...
end;
Потом встает малюсенькая локальненькая задачка - убрать пробелы из имен mp3-файлов. Дергаю выше приведенный код и недолго думая (а то даже и вообще не думая) превращаю в:
if (s<>'*') and (s<>'*.') then begin
if s='*.mp3' then DoMp3();
end;
А затем уже совсем не думая:
if (s<>'*') and (s<>'*.') and (s='*.mp3') then DoMp3();
Кажется, никто не может винить меня за то, что я пользуюсь услугами BackSpace чаще, чем собственным чувством "емкости" или "компактности" или "оптимальности" кода. А с точки зрения правоты кода - он прав на 100%. Он всего лишь избыточен по условиям. Но право слово - задача (см. выше) не такова, чтобы заботиться о "достаточности и необходимости".
Шаманство это? Считаете, что шаманство - пожалста!
Fay (2004-07-30 16:40:00) [13]2GrayFace (30.07.04 16:34) [31]
Я просто хотел сказать, что кто-то из нас (меня и olookin) тормозит. И не знаю кто. После этого я пошёл спать.
GrayFace (2004-07-30 16:34:00) [14]Остальное шаманство в olookin[5]. По поводу
if (s<>'*') and (s<>'*.') and (s='*.mp3') thenцитирую Fay [16]:Не думаю, что человек, для которого проявление такой тупизны является нормой, смог бы сам завести анкету на форуме.Хотя я бы не был столь катигоричен.
olookin (2004-07-30 14:44:00) [15][29] Fay © (30.07.04 14:41)
Не гарантируется, как и сказано в 27
Fay (2004-07-30 14:41:00) [16]
> Я не совсем понял вопрос. Применительно к моему примеру
> скажу, что атрибут faAnyFile включает "указатель" (вольная
> интерпретация наблюдаемого) на текущую папку. Т.е. когда
> я задал каталог для поиска, сначала (первый раз, т.е. при
> вызове FindFirst) находится этот указатель (".").Поэтому
> мне и не нужно вставлять FindNext в FindFirst, потому что
> FindFirst все равно не возвратит никогда нужного значения.
не гарантируется
olookin (2004-07-30 12:20:00) [17][27] panov © (30.07.04 12:07)
>olookin © (30.07.04 12:00) [26]
Записал. Попробовал. Работает. Если в корне диска не было бы папок - тогда возможно и не сработало бы.
panov (2004-07-30 12:07:00) [18]>olookin © (30.07.04 12:00) [26]
А ты свою программу запиши в корень диска.
olookin (2004-07-30 12:00:00) [19][23] Fay © (29.07.04 16:56)
2olookin © (28.07.04 20:53) [5]
Ты можешь привести документ, регламентирующий порядок нахождения файлов с помощью FindFirst/FindNext?
Я не совсем понял вопрос. Применительно к моему примеру скажу, что атрибут faAnyFile включает "указатель" (вольная интерпретация наблюдаемого) на текущую папку. Т.е. когда я задал каталог для поиска, сначала (первый раз, т.е. при вызове FindFirst) находится этот указатель ("."). Поэтому мне и не нужно вставлять FindNext в FindFirst, потому что FindFirst все равно не возвратит никогда нужного значения.
Иное дело если в атрибуте я уберу faAnyFile. Тогда действительно первый файл улетит.
Юрий Зотов (2004-07-29 17:07:00) [20]"Альфанумерикальным"...
Тоже красиво...