![]() |
WinApi||посчитать сколько файлов и папок на диске
Здравствуйте. Подскажите пожалуйста, почему у меня при подсчете кол-ва файлов и папок на диске это количество не соответствует действительности.
Код:
for( int i = 0; i < 26; i++ ) |
Погоди-ка, чёт не понял:
hFirstFile = FindFirstFile(_T("a:\*.?*"), &wfd); // Попытка создать указатель на файлы? hFirstFile1 = FindFirstFile(_T("a:\*."), &wfd); // Попытка создать указатель на папки? Так что-ли? А если файл без расшерения? Тогда он будет видится как папка. И почему ты тогда не поставил точки, в следующей части, своего, кода: Код:
if(i==2) |
bezumes
Сам не пробовал, но судя повсему FindFirstFile - найти первый файл, следовательно следующие файлы в каталоге находятся FindNextFile. Насколько япомню "?" это 1 любой символ, и чем тогда "*.?*" отличается от "*.*" Diseased Head "*" это любая последовательность любых символов, а "*." это значет в конце должна стоять точка наример "ReadMe." |
Vovchick1
Цитата:
Цитата:
|
bezumes
Обратите внимание на неправильный инкремент (лишний "+"): Код:
if (hFirstFile != INVALID_HANDLE_VALUE) Попробуйте сделать одну маску "*.*" и уже потом по атрибутам разделять каталоги и файлы. Или задача другая: "подсчитать количество отдельно с расширением и без расширения"? PS для красоты и уменьшения кода я бы посоветовал букву диска формировать. PPS Только что обратил внимание: вам нужно подсчитать каталоги и папки только в корне диска? |
Цитата:
Цитата:
Цитата:
Цитата:
Код:
Цитата:
Цитата:
|
bezumes
К сожалению, под рукой C++ освежить в памяти синтаксис и функции нету, а не программировал на С я давно. Попробую составить примерный алгоритм на "псевдо-C++" (дикой смеси си и васика). Код:
функция ПосчитатьВсеДиски() to All Ногами не пинать! ;) На си не пишу уже давно... Деградировал до VBA и 1С ;) |
bezumes
Цитата:
aESThete Цитата:
Цитата:
Всё нормально... Без обид aESThete... :joke: |
Diseased Head
Цитата:
"*.*" - расширение любое (может и пустое) "*.?*" - расширение не пустое (не менее 1 символа) "*.??*" - соответственно не менее 2 символов |
aESThete, в коммандной строке Win XP (да и в DOS'е), получаем:
dir *,*, dir *,?* и dir *,??* - выводятся все файлы и папки (с расширением и без). dir *.? - выводятся файлы и папки, с расширением в один символ и без расширения (не более одного символа). Из книжки В. Э. Фигурнов "IBM PC для пользователя": Символ ? обозначает один произвольный символ или отсутствие символа в имени файла или в расширении имени файла. Так что ты не прав. К сожалению - НЕ МЕНЕЕ нельзя зделать. |
Все-равно, даже когда я поставил *.* чтобы все посчитать, он мне как-то неправильно считает. Например в корне диска d у меня на два
меньше чем он считает, а на с всего шесть, а он считает 18. Код:
char temp[100]; Цитата:
|
bezumes
Цитата:
|
Цитата:
2. Может переменную "счётчика" не обнулил до начала циклов, и вней присутствуют левые данные. Цитата:
И "..." (Или что-то в этом роде, уже непомню). |
Vovchick1
см. мой исходник: (hFirstFile.name != "." && hFirstFile.name != "..") это ссылки на себя и на предка (но откуда они в корне?!) прекрасно видно, если смотреть каталог DiskEdit'ом Diseased Head Цитата:
для пробы создал readme. readme.t readme.tx readme.txt под XP dir *.*, *.?* и т.д. дают одинаковы е результаты но read?me (файлов не найдено) и read*me (файлы найдены) отрабатывает чётко |
aESThete
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
|
Цитата:
Код:
CString bukva[26]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'}; |
В итоге получилось вот так:только долговато ищет(у меня 14.19 сек, а что будет на более слабых компах:) ), ну и результаты от стандартного поиска отличаются(но немного)
Код:
Find(CString(bukva[i])+CString(":")); Код:
void CSysInfoDlg::Find(CString szPath) |
Время: 06:07. |
Время: 06:07.
© OSzone.net 2001-