Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.50/68: Рейтинг темы: голосов - 68, средняя оценка - 4.50
29 / 58 / 6
Регистрация: 10.01.2011
Сообщений: 1,231

Странная работа FindFirstFile

25.10.2016, 00:12. Показов 14596. Ответов 49
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Вывожу функциями FindFirstFile и FindNextFile и получаю имена "." и ".." далее идут все файлы находящиеся в указанной директории. Не подскажете почему получаются имена с точками?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.10.2016, 00:12
Ответы с готовыми решениями:

Работа с функцией FindFirstFile (API)
Здравствуйте уважаемые. У меня такая проблема - есть буфер (тип char) в нем хранятся пути к файлам, я каждую строку поместил в массив то...

Работа с файлами поиск файлов FindFirstFile,FindNextFile
Доброго времени суток, спустя долгое время, с измученным гуглом я нашел решение проблемы, но создалась еще одна проблема ...

Странная работа vk.com
Недавно я проапгрейдил комп, поставил новую мать, ссд и проц, и сверху на ссдшник накатил новую винду. Однако после переустановки виндовс...

49
844 / 353 / 68
Регистрация: 20.11.2012
Сообщений: 852
31.08.2021, 09:00
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Nexi99 Посмотреть сообщение
точечка говорит о смене дериктории наверное https://desktop.arcgis.com/ru/... nd-url.htm
Вот из этой же статьи:
Относительные пути используют два специальных символа: точку (.) и двойную точку (..), которые используются для перехода в текущий и родительский каталог, соответственно. Двойные точки используются для перехода на один уровень вверх. Одна точка означает собственно текущую директорию.
При работе с FindFirstFile оно тебе не нужно. Просто отфильтровывай.
Это просто файлы (по сути своей ссылки), которые нужны для задания относительных путей (cd .., например, переход в родительскую папку). Точка ссылается на текущий каталог, две точки - на родительский.
0
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
31.08.2021, 10:08
Так а может туда и доступа нету раз точечка если пишешь путь так оно смотрит а так мудрить нужно.

Добавлено через 1 минуту
Цитата Сообщение от WhiteP Посмотреть сообщение
Просто отфильтровывай.
так а как войти я получил путь хочу в него в лезть по высоте по рангу, как вход по высоте происходит? В противном случае каталог вообще пропускается оно не входит туда? А почему wcout просто тупо не выводит ничего?

Добавлено через 3 минуты
я наверное не на тот ранг скопировал это дело поэтому и входа нет. Тут получается многоранговый разношерстный массив.
0
844 / 353 / 68
Регистрация: 20.11.2012
Сообщений: 852
31.08.2021, 10:15
Цитата Сообщение от Nexi99 Посмотреть сообщение
так а как войти я получил путь хочу в него в лезть по высоте по рангу, как вход по высоте происходит?
Не понимаю что тебе нужно. Строишь дерево каталогов от корня при обходе с помощью FindFirst/FindNextFile и потом по этому дереву куда хочешь гуляй.
Цитата Сообщение от Nexi99 Посмотреть сообщение
А почему wcout просто тупо не выводит ничего?
Значит нечего выводить. Что именно ты делаешь я не знаю, т.к. кода не вижу.
0
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
31.08.2021, 12:13
wprintf надёжнее чем wcout, не знаю насколько но лучше работает.

Добавлено через 22 минуты
Цитата Сообщение от WhiteP Посмотреть сообщение
Не понимаю что тебе нужно.
В общем я разобрался эти функции не могут проходить ранги нету доступа к открытию каталога, нужно разобраться как открыть каталог.

Добавлено через 1 час 0 минут
Цитата Сообщение от WhiteP Посмотреть сообщение
Значит нечего выводить. Что именно ты делаешь я не знаю, т.к. кода не вижу.
Да вы были правы их просто надо пропустить там сначала идёт ". " ".. " а потом поиск файла. Но ещё не забыть про скрытые системные папки они часто не видны их тоже нужно пропускать.
0
 Аватар для Morgot
336 / 129 / 18
Регистрация: 26.12.2010
Сообщений: 501
31.08.2021, 13:40
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
DWORD WINAPI RecursiveSearch(LPWSTR szPath) 
{
    WIN32_FIND_DATAW wfd;
    HANDLE hFind;
    WCHAR * lpLastChar = szPath + lstrlenW(szPath);
 
 
    lstrcatW(szPath, L"*");
    hFind = FindFirstFileW(szPath, &wfd);
    if(hFind == INVALID_HANDLE_VALUE) 
    {
        return 0;
    }
    *lpLastChar = '\0';
 
    do {
        if((0 == lstrcmpW(wfd.cFileName, L".")) || (0 == lstrcmpW(wfd.cFileName, L".."))) 
        {
            continue;
        }
        if(wfd.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT)
        {
            continue;
        }
 
        lstrcatW(szPath, wfd.cFileName);
 
        if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) 
        {
            lstrcatW(szPath, L"\\");
            RecursiveSearch(szPath);
        } 
        else 
        {
            //что-нибудь делаем с файлом, выводим например
 
        }
        *lpLastChar = '\0';
    } 
    while(FindNextFileW(hFind, &wfd));
 
    FindClose(hFind);
return 0;
}
0
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
31.08.2021, 15:19
Цитата Сообщение от Morgot Посмотреть сообщение
L"."
Ну я об этом не знал, но эти точечки как раз и появляются когда происходит углубление переход в следующий каталог который я назвал рангом, а справочнике об этом тоже внятно не написали. Если честно я пересрал не на шутку думал неужели всё закрыли они же любят безопасность(вот бы не сглазить). Да там есть какие-то атрибуты у похожих функций, что-то там можно мудрить, смотрел но не понял пока да и не нужно пока что.
Пример этот где-то видел но комментариев нет хрен его знает что имеется в виду. Моя функция намного сложнее этого примера.
Также не понятно почему wcout работает хреново я решил использовать wprintf. Ну тут опять как не крути практиковаться надо бери и делай так и научишься лучше. Но правда нервы трохи съешь, а их в любом случае съешь потому что книгу не зазубришь всё подкрепляется практикой.
0
 Аватар для Morgot
336 / 129 / 18
Регистрация: 26.12.2010
Сообщений: 501
31.08.2021, 20:09
Цитата Сообщение от Nexi99 Посмотреть сообщение
Также не понятно почему wcout работает хреново я решил использовать wprintf.
с консолью что-то, в винде там есть какие-то нюансы с кодировками. Я бы выводил в Outputdebugstring или еще куда, или не игрался с русскими символами.
А практика по любому нужна.
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
03.09.2021, 15:51
Цитата Сообщение от Nexi99 Посмотреть сообщение
эти точечки как раз и появляются когда происходит углубление переход в следующий каталог который я назвал рангом, а справочнике об этом тоже внятно не написали
Неужели ни разу не видели эти точки?
C
1
2
3
4
#include <stdlib.h>
 
int
main(){        system( "DIR \"%systemroot%/system32/drivers/etc\" /w" );    }
0
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
03.09.2021, 21:27
Цитата Сообщение от politoto Посмотреть сообщение
Неужели ни разу не видели эти точки?
ни точечки ни 10 а может 1000чи скрытых файлов которые оно там находит, сильно затрудняет написание алгоритма т.к. не знаешь глубины но раз начал закончу его.
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
04.09.2021, 07:39
Практически в WIN32 достаточно ограничиться длиной пути (полного имени файла от корня) MAX_PATH.
Приведённая выше RecursiveSearch() явно не ограничена какой-либо глубиной вложенности.
0
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
04.09.2021, 16:27
Цитата Сообщение от politoto Посмотреть сообщение
RecursiveSearch()
И что с ним делать. В справочнике непонятное описание https://docs.microsoft.com/en-... ew=sccm-ps?
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
04.09.2021, 16:36
Nexi99, я писал не о параметре командлета Powershell, а о функции, текст которого приведён в сообщении от Morgot:
https://www.cyberforum.ru/post15689220.html
0
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
04.09.2021, 20:01
Цитата Сообщение от politoto Посмотреть сообщение
а о функции
я ниже написал что у меня функция будет своя я её делаю сейчас. Но просто там нет комментариев про эти точечки о том где они возникают. Хотя и пост есть с точечками(и даже с 3мя) в этой теме, но где они стоят я тоже не знал. Потому что когда тестировал функцию по совету пользователей их не было. Но я тогда передавал почти полный путь и видимо получил другие результаты. А сейчас стал копать там и точечки и куча скрытых файлов.

Добавлено через 2 часа 59 минут
Цитата Сообщение от Morgot Посмотреть сообщение
".."
сначала нормально было а теперь бесконечный цикл что делать и как такое может быть?

Добавлено через 1 минуту
Цитата Сообщение от Morgot Посмотреть сообщение
continue;
не катит наверное нужно выходить. Оно шастает по корзине по ходу и другим стрёмным местам.

Добавлено через 4 минуты
FindNextFileW
Ещё одна очередная глючная функция

Добавлено через 26 секунд
Даже не знает можно ли смотреть каталог или нет.
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 1
05.09.2021, 09:06
Цитата Сообщение от Nexi99 Посмотреть сообщение
Ещё одна очередная глючная функция
Сколько пользовал, никогда ничего не глючило. Может дело не в функции?
0
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
05.09.2021, 16:50
Цитата Сообщение от Croessmah Посмотреть сообщение
Сколько пользовал, никогда ничего не глючило. Может дело не в функции?
Ну у меня в этих дебрях D:\$RECYCLE.BIN\S-1-5-21-2077242896-944716495-45202983-1000\$R386ABA\чёто там шастает. Потом идёт ". " ".. "и бесконечный цикл. Поставил счётчик если равен 2ум то выход а иначе по другому никак. В других местах пропускается нормально. Что за ерунда не знаю.
0
фрилансер
 Аватар для Алексей1153
6495 / 5726 / 1133
Регистрация: 11.10.2019
Сообщений: 15,287
05.09.2021, 16:57
Nexi99, точки нужно пропускать. Двоеточие - это переход на один каталог выше, а точка - тот же самый каталог. Конечно же, это может вызвать лавинообразную рекурсию
0
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
05.09.2021, 18:24
Цитата Сообщение от Алексей1153 Посмотреть сообщение
Nexi99, точки нужно пропускать. Двоеточие - это переход на один каталог выше, а точка - тот же самый каталог. Конечно же, это может вызвать лавинообразную рекурсию
дело в том что какой-то каталог попался где нет пропуска вот в чём дело. Может он пустой и такой результат опять же я не знаю.
0
 Аватар для Morgot
336 / 129 / 18
Регистрация: 26.12.2010
Сообщений: 501
06.09.2021, 00:35
Nexi99, ну значит пропускайте корзину или очищайте ее. Не знаю, код который выше, протестирован множество раз на разных системах; про саму апи уже писал - 30 лет и миллиарды строк кода, была бы "глючная", давно бы отправили в Майкрософт баг репорты.
Выводите пути через outputdebugstring или еще куда, смотрите где именно зависло и как. Только дебаг лог может помочь тут.
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
06.09.2021, 11:28
Nexi99, если не нужны скрытые, системные или файлы ещё с какими-то атрибутами, то их тоже можно пропускать при переборе
https://docs.microsoft.com/en-... -constants

C
1
2
3
4
5
6
7
8
      if(wfd.dwFileAttributes & ( 
                  FILE_ATTRIBUTE_REPARSE_POINT
                | FILE_ATTRIBUTE_HIDDEN
                | FILE_ATTRIBUTE_SYSTEM
        ))
        {
            continue;
        }
0
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
26.09.2021, 04:57
В общем ребята если постоянно(бесконечно) идёт строка ".." то это значит что папка пуста. Писали что у некоторых ОС бывает и 3 точечки что там я не знаю. Плохо что в справочнике это не написано и попробуй разобраться как эти функции работают.
И ещё вроде видел что можно получать дескриптор папки может не так понял, ссылку не сохранил а что за функция не помню. Насколько мне известно только при открытии можно получить дескриптор и это не дескриптор папки а просто как временный дескриптор процесса для пользования.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.09.2021, 04:57

Странная работа Wi-Fi
Вчера начал пропадать интернет т.е. есть, рраз на пол минуты - минуту отключается и снова есть, пропадет по разному бывает каждые 5 минут,...

Странная работа БД
Спасибо всем тем, кто решил откликнуться. Сначала лирика: Имеется проект &quot;Калькулятор&quot;, созданы различные типы инженерный,...

Странная работа ПК
Всем привет. Вчера все было нормально, сегодня начал заходить в игру - начал замечать что при заходе в нее начинает что-то свистеть в...

Странная работа потока
Вообщем не могу понять в чем дело, есть программа: //--------------------------------------------------------------------------- ...

Странная работа getch
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int main() { int m; m=getch(); switch (m)


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот. Ларри Уингет
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru