|
Функция Dir нереэнтерабельна
|
|
| zamabuvaraeu | Дата: Понедельник, 10.11.2025, 19:54 | Сообщение # 1 |
|
Полковник
Группа: Друзья
Сообщений: 177
Статус: Offline
| Возьмём простой для получения файлов в директории: Код Dim filename As String = Dir("*.*")
Do While Len(filename) Print filename DoSomething() filename = Dir() Loop
Если функция DoSomething() внутри себя тоже будет обходить каталоги, то это испортит весь внешний цикл обхода каталогов: Код Sub DoSomething() ' Это испортит внешний цикл ' и обход директорий извне сломается file = Dir("*.bas") End Sub
Когда DoSomething() находится в библиотеке, такая библиотека будет портить всю программу.
|
| |
|
|
| DarkDemon | Дата: Вторник, 11.11.2025, 09:07 | Сообщение # 2 |
|
Генерал-майор
Группа: Друзья
Сообщений: 270
Статус: Offline
| Да как бы всё верно пишешь. Но тут вопрос конкретных потребностей. А их в принципе немного: 1) Обойти каталог и подкаталоги, не вычисляя что-то в процессе 2) Обойти каталог и подкаталоги, вычисляя что-то (твой случай) 3) Просто обойти каталог
И мне кажется такой простой функционал можно использовать только в 1 и 3 случае. Насколько я понял тебе важно обойти подкаталог и получить быстрый результат, не входя в другие подкаталоги, т.к. сканирование занимает время, иногда большое.
Тут многое зависит от целевой программы и именно зачем она это делает и может ли она позволить выделить память на скан всех подкаталогов, чтобы потом отработать свою задачу по файлам и каталогам из памяти.Добавлено (11.11.2025, 09:16) --------------------------------------------- Ну и опять же, ты же вроде под винду пишешь, зачем тебе кроссплатформа? А функции сканирования были в библиотека Стаса, выдерни их из Window9, делов то...
|
| |
|
|
| zamabuvaraeu | Дата: Вторник, 11.11.2025, 17:38 | Сообщение # 3 |
|
Полковник
Группа: Друзья
Сообщений: 177
Статус: Offline
| Дело не в этом.
Дело в том, что кто‐то в другой библиотеке может вызвать Dir() и сломать мою программу.
|
| |
|
|
| DarkDemon | Дата: Вторник, 11.11.2025, 19:04 | Сообщение # 4 |
|
Генерал-майор
Группа: Друзья
Сообщений: 270
Статус: Offline
| Цитата zamabuvaraeu (  ) Дело в том, что кто‐то в другой библиотеке может вызвать Dir() и сломать мою программу. Да, использование чужих библ - всегда риски, разные и сложные, каждый прогер отдаёт себе в этом отчёт.
Этот DIR пришёл из времён DOS, оно там так и работает, насколько мне известно. Авторы компилятора вынуждены поддерживать совместимость, можно было всё сделать по-другому, но почему-то не сделали.
|
| |
|
|
| zamabuvaraeu | Дата: Среда, Вчера, 13:00 | Сообщение # 5 |
|
Полковник
Группа: Друзья
Сообщений: 177
Статус: Offline
| Вот так архаизмы 1988 года мешают языку развиваться и становиться современным в 2025 году.
|
| |
|
|
| DarkDemon | Дата: Среда, Вчера, 20:29 | Сообщение # 6 |
|
Генерал-майор
Группа: Друзья
Сообщений: 270
Статус: Offline
| Цитата zamabuvaraeu (  ) Вот так архаизмы 1988 года мешают языку развиваться и становиться современным в 2025 году. Моё мнение: что развитие в таком формате в принципе не может быть адекватным. Т.е. забить хрен на IDE, на первичную идеологию языка, фигарить компили на 3 платформы, когда одну трудно обслужить и оттестить(это просто факт и мало кто будет спорить). И ещё поддерживать устаревший DOS, да ещё в виде DPMI. Когда за 25 лет меняется куча людей в разрабах, каждый тянет что-то в какую-то сторону, получается - лебедь, рак и щука, даже если что-то изначально и было - они это просто разодрали.
Но как есть так есть, дарёному КОНЮ в зубы не смотрят, народная мудрось!
Вообще специфика понятная, тут можно пошутить на тему "Библиотеки есть? А если найду?", но как-то и без шуток веселее некуда...
|
| |
|
|