0 / 0 / 0
Регистрация: 30.03.2015
Сообщений: 33
|
|||||||||||
1 | |||||||||||
Как посчитать сколько на указанном пользователем диске всего файлов и папок?03.10.2016, 17:28. Показов 1648. Ответов 17
Метки нет (Все метки)
Дело такое: нужно как-то посчитать сколько на указанном пользователе диске всего файлов и папок.
Знаю, звучит трудно, может и глупо, но других вариантов в голу не пришло. Если есть у кого идеи, или знает способ иной, то подскажите, буду рад легшему способу. P.S. было бы хорошо, еще посчитать память, что занимают все файлы.
0
|
03.10.2016, 17:28 | |
Ответы с готовыми решениями:
17
Подсчет и вывод объема всех скрытых файлов на диске, указанном пользователем Подскажите как получить список всех папок и файлов на диске С Поиск файлов на диске, за исключением скрытых файлов и папок Поиск указанных файлов на указанном диске и вывод результата на экран |
7787 / 6555 / 2983
Регистрация: 14.04.2014
Сообщений: 28,633
|
|
03.10.2016, 18:24 | 2 |
Ну а рекурсия, что, не работает?
0
|
0 / 0 / 0
Регистрация: 30.03.2015
Сообщений: 33
|
|
03.10.2016, 19:14 [ТС] | 3 |
0
|
7787 / 6555 / 2983
Регистрация: 14.04.2014
Сообщений: 28,633
|
|
03.10.2016, 19:54 | 4 |
Рекурсия - достаточно простой способ.
0
|
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
|
|
03.10.2016, 20:15 | 5 |
"Очевидное" решение - распарсить вывод df -i, исходя из идеи что каждый файл и папка кушают по одному inode.
Но если под Винду, на NTFS и без симлинков, то рекурсия.
1
|
0 / 0 / 0
Регистрация: 30.03.2015
Сообщений: 33
|
|
04.10.2016, 21:23 [ТС] | 6 |
Может кто подскажет как для сего сотворить рекурсию, а то с ними почти не работал =(
Принцип я то понял, но некоторые моменты не могу состыковать. Например: начальный адрес у переменной "c:\\*", натыкается поисковик на папку, и добавляет имя папки к адресу, т.е. выйдет "c:\\папка\\*" , и так пойдем дальше пока не закончатся папки. После функция делает следующий шаг по предыдущему адресу или уже по измененному?
0
|
7787 / 6555 / 2983
Регистрация: 14.04.2014
Сообщений: 28,633
|
|
04.10.2016, 22:49 | 7 |
Цикл создаёшь по папкам в текущей и делаешь вызовы.
0
|
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
|
|
05.10.2016, 10:07 | 8 |
Так и организовать. На входе у функции путь к обрабатываемой папке. Она идет по содержимому папки и плюсует счетчик файлов. Например, оформленный как глобальная переменная. Если функция натыкается на папку - вызывает саму себя с адресом папки. А потом едет по содержимому папки дальше.
Ну а код набивайте сами.
1
|
0 / 0 / 0
Регистрация: 30.03.2015
Сообщений: 33
|
|||||||||||
05.10.2016, 18:51 [ТС] | 9 | ||||||||||
Я не могу понять как передать в функцию адрес папки на которую мы наткнулись, точнее сказать никакие действия не помогают. Ведь в начальную функцию мы передаем переменную типа чар,
0
|
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
|
|
05.10.2016, 19:14 | 10 |
И какие проблемы с константой? Никто не запрещает использовать не константный объект там, где требуется константа. Нельзя делать наоборот.
0
|
0 / 0 / 0
Регистрация: 30.03.2015
Сообщений: 33
|
||||||
05.10.2016, 20:19 [ТС] | 11 | |||||
Вот попробовал сделать рекурсию. Сделал переменную в которую копирую имя старого пути + имя открытой папки. Потом передаю его в эту же самую функцию но получаю ошибку =(
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
05.10.2016, 20:28 | 12 |
Получить вывод Dir в программу
грамотный рекурсивный обход всей файловой системы должен предполагать наличия ссылок. и учитывать это. иначе возникает ненулевая вероятность, что программа впадет в вечный цикл. а в случае с рекурсивным алгоритмом, это неизбежно приведет к переполнению стека, и краху программы.
0
|
59 / 59 / 53
Регистрация: 05.05.2013
Сообщений: 150
|
|
05.10.2016, 20:38 | 13 |
у вас char tymeName[30] - массив в 30 элементов,
а в циклах максимальный индекс массива установлен в 4201, там программа выходит за пределы массива и компилятор об этом говорит.
0
|
0 / 0 / 0
Регистрация: 30.03.2015
Сообщений: 33
|
|
05.10.2016, 20:42 [ТС] | 14 |
Это уже исправил, сам уменьшил, и забыл вернуть
Добавлено через 1 минуту программа ушла в никуда, я так понял пошло зацикливание
0
|
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
|
|
05.10.2016, 20:43 | 15 |
Я же сказал - "нельзя делать наоборот". Ваша функция должна принимать CHAR* и пихать в FindFirstFile. А уже в процессе пихания оно превратится в LPCSTR.
0
|
0 / 0 / 0
Регистрация: 30.03.2015
Сообщений: 33
|
|
05.10.2016, 20:47 [ТС] | 16 |
0
|
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
|
|
05.10.2016, 21:36 | 17 |
А, пардон, проглючило, показалось что вы пытались в NamesDIrectory и старый путь хранить, и новый, а ошибка вылетала из-за попытки в константный NamesDIrectory писать. В этом случае как раз и надо было бы менять LPCSTR на входе функции на CHAR*. Теперь заметил что новый путь вы в отдельную переменную пишете.
0
|
0 / 0 / 0
Регистрация: 30.03.2015
Сообщений: 33
|
|
05.10.2016, 22:57 [ТС] | 18 |
Да, моя функция полностью заработала. Внес еще одну коррективу для пропуска некоторых моментов. Считает все точь в точь. Спасибо за помощь.
0
|
05.10.2016, 22:57 | |
05.10.2016, 22:57 | |
Помогаю со студенческими работами здесь
18
Найти суммарный размер всех файлов указанного типа на указанном диске Скрипт, который находит суммарный размер всех файлов указанного типа на указанном диске. Проверка наличия на диске в указанном каталоге перечисленных в списке файлов и вывод имен отсутствующих Поиск файлов на диске с исключением папок Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |