|
5 / 5 / 0
Регистрация: 31.03.2010
Сообщений: 71
|
|
Поиск папок с помощью FindFirstFile\FindNextFile24.08.2010, 09:12. Показов 27317. Ответов 51
Метки нет (Все метки)
0
|
|
| 24.08.2010, 09:12 | |
|
Ответы с готовыми решениями:
51
FindFirstFile и FindNextFile рекурсивный поиск файла FindFirstFile, FindNextFile и setLocale FindNextFile,FindFirstFile,FindClose |
|
Ушел с форума
|
|||||||
| 22.03.2014, 16:32 | |||||||
|
Добавьте в функцию Dir (рядом с объявлением DirList) такой фрагмент:
которое съедается на каждом шаге рекурсии. Размер стека по умолчанию равен одному мегабайту. Разделив 1 мегабайт на полученное число, получите ограничение на количество вложенности. Поиск по файловой системе лучше делать нерекурсивным, тогда не будет ограничений, связанных с рекурсией. Добавлено через 55 секунд Даже это приведет к ощутимому выигрышу в глубине возможной рекурсии.
0
|
|||||||
|
11 / 11 / 1
Регистрация: 22.12.2012
Сообщений: 508
|
|
| 22.03.2014, 16:34 | |
|
0
|
|
|
11 / 11 / 1
Регистрация: 22.12.2012
Сообщений: 508
|
||||||
| 22.03.2014, 16:39 | ||||||
|
Убежденный, сделал так
0
|
||||||
|
Ушел с форума
|
|
| 22.03.2014, 17:14 | |
|
Ну вот, 130 килобайт стековых переменных тратится на каждую итерацию.
1 мегабайт резерва / 130 кило - это получается примерно 7 итераций. Значит, поиск обломится на папке с такой глубиной вложенности. Можете сами проверить и убедиться.
0
|
|
|
11 / 11 / 1
Регистрация: 22.12.2012
Сообщений: 508
|
|
| 22.03.2014, 17:16 | |
|
Убежденный, Вы говорили что это можно сделать без рекурсии. Как?
0
|
|
|
Ушел с форума
|
|||||||
| 22.03.2014, 17:20 | |||||||
|
Ваш код в плане использования ресурсов стека эквивалентен такому:
Берем исходную папку, находим в ней все файловые объекты. Каждую найденную папку добавляем в список. Сам список держим в виде файла на диске, что позволяет ему быть практически неограниченного размера. Когда перечисление заканчивается, смотрим, была ли добавлена хотя бы одна папка в список. Если есть - выполняем также проход по ней. И так далее, пока на очередном витке не окажется, что ничего нового в список не добавлено. В этом случае поиск завершен.
0
|
|||||||
|
11 / 11 / 1
Регистрация: 22.12.2012
Сообщений: 508
|
||
| 22.03.2014, 17:24 | ||
|
0
|
||
|
Ушел с форума
|
|
| 22.03.2014, 17:47 | |
|
0
|
|
|
11 / 11 / 1
Регистрация: 22.12.2012
Сообщений: 508
|
||
| 22.03.2014, 18:59 | ||
|
Добавлено через 1 минуту Конечно есть вариант не перезаписывать файл, а всё подряд туда писать, но если так, то в нём будет полнейший балаган в котором невозможно будет ничего найти. Добавлено через 1 час 7 минут Я ДНО!!!!!!!!! Массив DirList там нафиг не нужен! Он просто остался с прошлого варианта попытки посчитать количество папок и файлов! Я его снёс и всё норм! 138 гиг занятого места 100k+ фалов и почти косарь папок посчитало и збс)))
0
|
||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|
| 22.03.2014, 19:02 | |
|
qwertun, ну и что же идеал достигнут? Код в студию =)
0
|
|
|
Ушел с форума
|
|||
| 22.03.2014, 19:04 | |||
|
Все, что в него уже записано ранее, остается на месте.
0
|
|||
|
11 / 11 / 1
Регистрация: 22.12.2012
Сообщений: 508
|
||||||
| 22.03.2014, 19:04 | ||||||
|
Izual, Это конечно не окончательный вариант (оконное приложение с листвью и прочим), а только консольное приложение, но оно работает)))
1
|
||||||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|
| 22.03.2014, 19:13 | |
|
qwertun, это и требовалось, сам алгоритм, а окошки сделают сами те кто нуждаются. Спасибо =)
0
|
|
|
11 / 11 / 1
Регистрация: 22.12.2012
Сообщений: 508
|
||
| 22.03.2014, 19:14 | ||
|
Осталось только копипастом в другой проект перенести
0
|
||
|
11 / 11 / 1
Регистрация: 22.12.2012
Сообщений: 508
|
||||||
| 14.04.2014, 10:17 | ||||||
|
Ребята! Если тут есть кто живой откликнетесь пожалуйста!
![]() Я столкнулся с небольшой проблемой при прикручивании кода выше в оконное приложение. В функции которая считает кол-во файлов и папок есть рекурсия из-за этого все переменные с путями я решил сделать вида
0
|
||||||
|
11 / 11 / 1
Регистрация: 22.12.2012
Сообщений: 508
|
|||||||||||
| 14.04.2014, 10:22 | |||||||||||
|
Забыл кинуть код
Бывает ![]()
0
|
|||||||||||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|
| 14.04.2014, 23:08 | |
|
qwertun, getlasterror вызывай. Логируй в файл операции... Может найдёш в чём проблема и почему.
0
|
|
|
11 / 11 / 1
Регистрация: 22.12.2012
Сообщений: 508
|
||||||
| 01.05.2014, 16:46 | ||||||
|
Izual, надеюсь на Вашу помощь.
Вобщем делаю ту часть программы которая должна отвечать за оповещения пользователя при изменении содержимого диска. Впринцыпи она это делает, но есть одно НО: программа ничего больше не делает кроме ожидания изменений. Код:
З.Ы. Чтоб не поганить основной проект сделал отдельной прожкой.
0
|
||||||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|
| 01.05.2014, 17:12 | |
|
qwertun, я в общем то и сам нуб =)
Что то я не понял, что значит в фоновом режиме?.. Вообще у вас получается каждое мгновение вызывается функция ReadDirectoryChanges в безконечном while цикле. Вот я бы это изменил, по идее же(ну я предполагаю) что работа функции должна быть только когда что то произошло, т.е. как в оконной процедуре. Не знаю, может какой то хук(чтоб перехватить сообщение изменения) есть на подобное... Думаю вам стоит побольше почитать, вот например http://msdn.microsoft.com/en-u... s.85).aspx там есть ссылка на "изменение в журнале"... может там что то есть путное.
0
|
|
|
11 / 11 / 1
Регистрация: 22.12.2012
Сообщений: 508
|
||||||||||||||||||||||
| 01.05.2014, 17:41 | ||||||||||||||||||||||
|
Если посмотреть в код то там есть строки
Добавлено через 6 минут меня осенило!!!!
0
|
||||||||||||||||||||||
| 01.05.2014, 17:41 | |
|
Рекурсивный обход (FindFirstFile, FindNextFile) WIN32 FindFirstFile и FindNextFile возвращают некорректное время FindNextFile
Функция FindFirstFile Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
|
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701
Купил два термопринтера QR701.
На сэлф-тесте написано:
Language: PC936 (GB18030).
Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
|