Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.84/50: Рейтинг темы: голосов - 50, средняя оценка - 4.84
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,576

Что означают точки в Dir при использовании атрибута vbDirectory?

18.07.2014, 10:42. Показов 9822. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Например, этот код:
Visual Basic
1
2
    Debug.Print Dir("C:\Папка\", vbDirectory)
    Debug.Print Dir
вернёт сначала точку, а затем две точки.

Как понять эти точки и где их можно использовать?

Допустим, я получил точку, и что я могу сделать с точкой?
Или, допустим, я получил две точки и что можно сделать с этими точками?

Я так понимаю, что это связано со старыми компьютерами, когда не было Windows и использовалась другая операционная система, и, видимо, с тех пор осталось в использовании. Поэтому тем, кто сразу стал работать на новых компьютерах, не понятны такие детали.

У меня такое предположение, где можно использовать эти точки, - с помощью точек можно определить, является ли папка корневой (под корневой папкой, например, понимается диск "C"). Если эта команда не возвращает точку, значит это корневая папка:
Visual Basic
1
    Debug.Print Dir("C:\")
Но остаётся вопрос, а зачем нужны две точки?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.07.2014, 10:42
Ответы с готовыми решениями:

Что означают точки?
Получаем доступ к io через java, для того, чтобы получить доступ к IOException? Что означают точки? import java.io.IOException;

Ошибка при использовании атрибута alt
Доброго времени суток, значит пишу я такой код: <img src="https://www.gstatic.com/images/branding/product/2x/photos_96dp.png"...

Что означают эти точки в этой?
Что означают эти точки в этой? Страницы 122. Ссылка на книгу.

23
Ts
8 / 8 / 3
Регистрация: 12.07.2014
Сообщений: 19
18.07.2014, 11:29
Это наследие DOSа и файлофой системы FAT. Две точки возврат в предыдущую дерректорию.
Досовская команда cd .. делает именно это.
1
6082 / 1327 / 195
Регистрация: 12.12.2012
Сообщений: 1,023
18.07.2014, 11:35
Скрипт, две точки нужны, чтобы подняться на уровень вверх в иерархии папок.

Например, такая команда:

Visual Basic
1
Dir("C:\SomeFolder\AnotherFolder\..\")
Эквивалентна команде:

Visual Basic
1
Dir("C:\SomeFolder\")
Еще пример. Пусть в папке SomeFolder лежат папки FolderA и FolderB. Вы посмотрели папку FolderA:

Visual Basic
1
Debug.Print Dir("C:\SomeFolder\FolderA\")
Потом вы захотели посмотреть папку FolderB. Находясь в папке FolderA, вы можете вызвать команду Dir следующим образом:

Visual Basic
1
Debug.Print Dir("\..\FolderB\")
И это будет эквивалентно команде

Visual Basic
1
Debug.Print Dir("C:\SomeFolder\FolderB\")
С уважением,
Aksima
3
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,576
18.07.2014, 17:41  [ТС]
Aksima, но, на первый взгляд, нет смысла в том, что функция "Dir" возвращает "." и "..".
Две точки ещё можно, наверное, как-то применить, а одну точку я не представляю, где можно использовать.

Я считаю, что это бред, что функция "Dir" возвращает "." и ".." и даже в справке ничего не сказано про эти точки.
0
призрак
 Аватар для ikki
3266 / 894 / 119
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
18.07.2014, 18:53
Цитата Сообщение от Скрипт Посмотреть сообщение
даже в справке ничего не сказано про эти точки
в справке Excel есть такой пример кода для функции Dir:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
' Display the names in C:\ that represent directories.
MyPath = "c:\"    ' Set the path.
MyName = Dir(MyPath, vbDirectory)    ' Retrieve the first entry.
Do While MyName <> ""    ' Start the loop.
    ' Ignore the current directory and the encompassing directory.
    If MyName <> "." And MyName <> ".." Then
        ' Use bitwise comparison to make sure MyName is a directory.
        If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory Then
            Debug.Print MyName    ' Display entry only if it
        End If    ' it represents a directory.
    End If
    MyName = Dir    ' Get next entry.
Loop
5-я и 6-я строчка - то, что Вы не увидели самостоятельно.

Цитата Сообщение от Скрипт Посмотреть сообщение
Я считаю, что это бред
Ваше мнение очень ценно для форума.
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,576
18.07.2014, 18:55  [ТС]
ikki, в Вашем сообщении нет ответа на вопрос темы.
0
призрак
 Аватар для ikki
3266 / 894 / 119
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
18.07.2014, 18:58
он есть, но Вы не в состоянии его увидеть.
впрочем, повторю:
Цитата Сообщение от ikki Посмотреть сообщение
5-я и 6-я строчка
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,576
18.07.2014, 19:00  [ТС]
ikki, и как строки 5 и 6 отвечают на вопрос темы?

Вопрос такой: зачем функция "Dir" возвращает эти точки? Что с ними делать?
0
призрак
 Аватар для ikki
3266 / 894 / 119
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
18.07.2014, 19:21
Скрипт, тогда и у меня к Вам вопрос - Вы не в состоянии прочитать 8 английских слов в комментарии в 5-й строке кода?
или Вы не знаете английский язык даже на таком уровне?
или Вас забанили во всех сервисах онлайн-переводчиков и словарей?

это такие директории (папки)
текущая и родительская
они есть
в любой директории
и функция их возвращает
как и другие директории (папки)
она их не может не вернуть только из-за того, что они не нравятся лично Вам или из-за того, что Вы до сих пор о них не слышали

эти папки вообще-то пришли даже не из DOS, они есть и в UNIX
есть до сих пор, и они не устаревшие и не бесполезные.
что с ними можно делать - Вам уже рассказали, хотя к теме форума VBA это имеет о-о-очень отдалённое отношение. зачем я буду повторяться?
имхо, вопросы, относящиеся к операционным системам, следует задавать в форуме по операционным системам.

кроме того, я отвечал не на Ваш вопрос (он неинтересный, и тему я даже не читал, пока не начал писать текущее сообщение в ответ на Ваше занудство)
в сообщении #5 я отвечал на то, что я привел в виде цитаты - а именно Ваше лживое утверждение, что в справке "ничего не сказано про эти точки"

сказано.
да, сказано немного, но этого вполне достаточно.
1
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,576
18.07.2014, 19:27  [ТС]
ikki, да, я не точно написал в сообщении #6. Вы дали ответ на вопрос темы.

Просто я неточно назвал тему или уже немного изменил вопрос.

Я понимаю, что
"." - это сама папка, которая просматривается;
.. - это родительская папка, т.е. папка, в которой находится просматриваемая папка.

Но зачем функция "Dir" возвращает эти точки? Что можно с этими точками делать? Об этом нигде нет информации.

В сообщении #3 написан пример использования точек внутри функции "Dir", но не приводится пример, что делать с точками, которые возвращает функция "Dir".
0
призрак
 Аватар для ikki
3266 / 894 / 119
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
18.07.2014, 19:32
Цитата Сообщение от Скрипт Посмотреть сообщение
Об этом нигде нет информации.
Вы продолжаете настаивать на своём заблуждении?
об этом есть даже в википедии - ресурсе, совсем не специализированном на сфере IT:
http://ru.wikipedia.org/wiki/К... ая_система)

что уж говорить про специализированные...
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,576
18.07.2014, 19:37  [ТС]
ikki, я подразумеваю, что нигде нет информации по VBA, зачем нужны точки, которые возвращает VBA-функция "Dir" - программисту только остаётся догадываться, зачем это нужно.
Может быть эти точки и нужны, но это можно узнать только при частой работе с функцией "Dir".

В справке по VBA можно было бы привести пример, в котором было бы видно, что делать с точками, которые возвращает "Dir".
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
20.07.2014, 00:04
Скрипт, информации нет потому, что
метод dir в VB6 собственно, как и одноименная команда в интерпретаторе командной строки
отображает в точности ту информация, которую получает через вызов API функций: FindFirstFile, FindNextFile.

А те в конечном итоге получают информацию о записях в файловой системе.
В итоге, . (dot) и .. (dotdot) - лежат в самой основе - спецификации файловой системы.

Here is the summary for the dot and dotdot entries:
• The dot entry is a directory that points to itself.
• The dotdot entry points to the starting cluster of the parent of this directory (which is 0 if this directories parent is the root directory).
Как уже поясняли выше,
. - директория указывает на себя.
.. - указывает на родительскую директорию (у корня диска нет родительской).
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,576
20.07.2014, 07:04  [ТС]
Dragokas, но для VBA-программиста нет смысла в точках, которые возвращает функция "Dir".
Поэтому программист, не работающий на старых компьютерах, может считать эти точки бредом.

Если организация "Microsoft" решила сделать в VBA функцию "Dir", то могла бы затем сделать два действия:
  1. организация "Microsoft" могла бы скорректировать функцию "Dir", убрав эти точки;
  2. организация "Microsoft" могла бы сделать Справку, в которой бы упомянула об этих точках и привела бы пример, как можно использовать точки, которые возвращает функция "Dir".
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
20.07.2014, 16:34
Скрипт, то что Вы не знаете, как этим воспользоваться не означает,
что данная возможность является бесполезной.

Приведу пример.
Домохозяйка открывает проводник и видит там привычные для себя файлы,
затем запускает команду Dir и с ужасом замечает, что там еще
хранятся какие-то скрытые и системные файлы.

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

Да, это несколько может запутать начинающих, когда получаешь листинг каталога,
а там кроме всего прочего еще и ссылка на предыдущий каталог.

Но ведь еще есть и точки повторной обработки (JUNCTION), которые вообще
могут вести куда угодно. Давайте попросим Майкрософт и их исключить из вывода Dir ?

На счет практической пользы:
- вот, к примеру, так Вы можете скопировать калькулятор в родительский каталог:

Visual Basic
1
FileCopy Environ("SystemRoot") & "\System32\calc.exe", "..\calc.exe"
- на счет . (dot) я навскидку не вспомню, какая команда в VBA может принимать только каталог в качестве
аргумента. Там вместо полного пути Вы можете просто подставить знак точки.
Первое, что я попробовал, копирование в текущий каталог:

Visual Basic
1
FileCopy Environ("SystemRoot") & "\System32\calc.exe", ".\"
Но в VBA такая команда не проходит по синтаксису. И это, как по мне, как раз недостаток
при разработке языка, что требуется обязательно указывать конечное имя файла.
В MS-DOS подобный синтаксис прекрасно работает.
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,576
20.07.2014, 16:38  [ТС]
Dragokas, в Ваших примерах не показано использование точек, получаемых из "Dir". В сообщении #3 тоже есть примеры с использованием точек, но эти точки не получены функцией "Dir", а просто записаны внутрь функции "Dir".
0
20.07.2014, 16:54

Не по теме:

почему мне хочется материться в этой теме? никто не знает?

0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
20.07.2014, 18:03
Скрипт, я понимаю о чем речь.
Сложный вопрос, если честно.

С рекурсией я думаю, здесь нет особого смысла играться, т.к. из нее потом не выйти.
Но вот, к примеру, есть необходимость обработать файлы,
которые находятся в подкаталогах, в текущей папке и в родительской папке.

Итого запускаем нашу программу: c:\users\alex\desktop\1.exe
Получаем список из:
- всех подкаталогов
- c:\users\alex\desktop (dot)
- c:\users\alex (dotdot)

Результат передаем процедуре получения и обработки списка файлов в этих каталогах.
Где может понадобится подобная схема, тут я уже затрудняюсь ответить. Нужно спрашивать у бывалых.
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
20.09.2014, 00:20
Цитата Сообщение от Dragokas Посмотреть сообщение
- на счет . (dot) я навскидку не вспомню, какая команда в VBA может принимать только каталог в качестве
аргумента. Там вместо полного пути Вы можете просто подставить знак точки.
Пример того, как можно использовать Dot (.) точку в VBA (VBScript)
для получения объекта Folder текущего каталога:

Visual Basic
1
2
3
4
5
6
7
Sub main()
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set folder = fso.GetFolder(".")
    For Each file In folder.Files
        Debug.Print file.Name
    Next
End Sub
1
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
20.09.2014, 03:05
ёклмн, я эт тоже проходил )))
https://www.cyberforum.ru/post5246515.html

Добавлено через 5 минут
Dragokas, кстати, многие либрары могут не работать..
вы не перв раз уже ссылаетесь на VBScript ..эта служба может быть вообще отключенна
и пользователь будет чесать репу, почему у него это не работает ))

Добавлено через 5 минут
Ко всему, нужно подходить изящнее..
как говорил мой бывший друг, каждая секунда программного времени на вес золота )))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.09.2014, 03:05
Помогаю со студенческими работами здесь

Что означают точки в приведенной строке
Здравствуйте . подскажите что означают точки в этой строке if (($item eq &quot;.&quot;) || ($item eq &quot;..&quot;)) {next;}

HIEW, что означают точки между байтами?
Что означают точки между байтами?

Что означают звездочки или точки на ваттметре? Правильное направление тока и напряжения ваттметра
Я так понимаю звездочки обозначают место входа стрелок (тока или напряжения). Правильно ли это? На данной схеме какое будет напряжение...

Что означают элементы шаблонов при объявлении мультимножества
Добрый вечер уважаемые спецы. Не могли бы объяснить по понятнее, что означают данные элементы шаблонов при объявлении мультимножества: ...

Что означают суффиксы u и w в PHP 7.0 при установке её из сторонних репозиториев
Доброго времени суток уважаемые! Подскажите пожалуйста, как так получилось что в официальных репозиториях RedHat/CentOS-7 последняя...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru