Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Маска папки [D5]


Страницы:   1 2 3

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]

"Альфанумерикальным"...
Тоже красиво...


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо