|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » WinApi||посчитать сколько файлов и папок на диске |
|
WinApi||посчитать сколько файлов и папок на диске
|
Пользователь Сообщения: 68 |
Профиль | Отправить PM | Цитировать
Здравствуйте. Подскажите пожалуйста, почему у меня при подсчете кол-ва файлов и папок на диске это количество не соответствует действительности.
for( int i = 0; i < 26; i++ ) {//запускаем цикл с целью опросить все устройства if(i==0) { hFirstFile = FindFirstFile(_T("a:\*.?*"), &wfd); hFirstFile1 = FindFirstFile(_T("a:\*."), &wfd); } else if(i==2) { hFirstFile = FindFirstFile(_T("C:\*.?*"), &wfd); hFirstFile1 = FindFirstFile(_T("C:\*"), &wfd); } else if(i==3) { hFirstFile = FindFirstFile(_T("d:\*.?*"), &wfd); hFirstFile1 = FindFirstFile(_T("d:\*"), &wfd); } else { hFirstFile = FindFirstFile(_T("bb:\*.?*"), &wfd); hFirstFile1 = FindFirstFile(_T("bb:\*."), &wfd); } if (hFirstFile != INVALID_HANDLE_VALUE) { do { nFilesCount =1+nFilesCount; } while (FindNextFile(hFirstFile, &wfd)); } if (hFirstFile1 != INVALID_HANDLE_VALUE) { do { nFilesCount1 =1+nFilesCount1; } while (FindNextFile(hFirstFile1, &wfd)); } nFilesCount=0;nFilesCount1=0; } |
|
------- Отправлено: 19:53, 18-12-2006 |
Пользователь Сообщения: 68
|
Профиль | Отправить PM | Цитировать Все-равно, даже когда я поставил *.* чтобы все посчитать, он мне как-то неправильно считает. Например в корне диска d у меня на два
меньше чем он считает, а на с всего шесть, а он считает 18. char temp[100]; for(int i=0;i<26;i++) { hFirstFile=0; WIN32_FIND_DATA FindFileData; HANDLE hf; if(i==2) { m_info += " В корне диска C "; hf=FindFirstFile("c:\\*.*", &FindFileData); //hFirstFile++; } else if(i==3) { m_info += " В корне диска D "; hf=FindFirstFile("d:\\*.*", &FindFileData); //hFirstFile++; } else { hf=FindFirstFile("e:\\*", &FindFileData); } if (hf!=INVALID_HANDLE_VALUE) { do { hFirstFile++; } while (FindNextFile(hf,&FindFileData)!=0); itoa( (int)hFirstFile, temp, 10 ); m_info += (CString)&temp[0]; m_info += " Файлов и папок";m_info += "\r\n"; FindClose(hf); } } UpdateData(false); Цитата:
|
|
------- Отправлено: 12:20, 21-12-2006 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 881
|
Профиль | Отправить PM | Цитировать bezumes
Цитата:
|
|
------- Отправлено: 19:32, 21-12-2006 | #12 |
Старожил Сообщения: 309
|
Профиль | Отправить PM | Цитировать Цитата:
2. Может переменную "счётчика" не обнулил до начала циклов, и вней присутствуют левые данные. Цитата:
И "..." (Или что-то в этом роде, уже непомню). |
||
Отправлено: 01:43, 22-12-2006 | #13 |
Старожил Сообщения: 401
|
Профиль | Отправить PM | Цитировать Vovchick1
см. мой исходник: (hFirstFile.name != "." && hFirstFile.name != "..") это ссылки на себя и на предка (но откуда они в корне?!) прекрасно видно, если смотреть каталог DiskEdit'ом Diseased Head Цитата:
для пробы создал readme. readme.t readme.tx readme.txt под XP dir *.*, *.?* и т.д. дают одинаковы е результаты но read?me (файлов не найдено) и read*me (файлы найдены) отрабатывает чётко |
|
------- Отправлено: 08:43, 22-12-2006 | #14 |
Старожил Сообщения: 309
|
Профиль | Отправить PM | Цитировать aESThete
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
|
|||||
Отправлено: 11:00, 22-12-2006 | #15 |
Пользователь Сообщения: 68
|
Профиль | Отправить PM | Цитировать Цитата:
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'}; char temp[100]; for(int i=0;i<26;i++) { hFirstFile=0;//обнуляем hFirstFile=0; // и здесь обнуляем WIN32_FIND_DATA lpFindFileData ; WIN32_FIND_DATA FindFileData; HANDLE hf; hf=INVALID_HANDLE_VALUE; hf=FindFirstFile(_T(bukva[i]+":\\*.*"), &FindFileData); if (hf!=INVALID_HANDLE_VALUE) { do {hFirstFile=0;hFirstFile=0; if ((FindFileData.dwFileAttributes&&FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY) { hFirstFile++; } else { hFirstFile1++; } } while (FindNextFile(hf,&FindFileData)!=0); m_info += " В корне диска "+_T(bukva[i]+" "); itoa( (int)hFirstFile, temp, 10 ); m_info += (CString)&temp[0]; m_info += "папок";m_info += "\r\n"; m_info += " В корне диска "+_T(bukva[i]+" "); itoa( (int)hFirstFile1, temp, 10 ); m_info += (CString)&temp[0]; m_info += " файлов";m_info += "\r\n"; FindClose(hf); } } UpdateData(false); |
|
------- Отправлено: 14:21, 22-12-2006 | #16 |
Пользователь Сообщения: 68
|
Профиль | Отправить PM | Цитировать В итоге получилось вот так:только долговато ищет(у меня 14.19 сек, а что будет на более слабых компах ), ну и результаты от стандартного поиска отличаются(но немного)
|
------- Отправлено: 12:08, 24-12-2006 | #17 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Любой язык - кто нибудь писал скриптик, для расчета количества папок на диске | pocient | Скриптовые языки администрирования Windows | 8 | 01-09-2009 13:04 | |
Посчитать количество файлов в папке | Lodoss | AutoIt | 10 | 21-08-2009 04:12 | |
Доступ - Нет доступа к полвине папок на диске Д | Gaaa | Microsoft Windows 2000/XP | 4 | 06-01-2009 14:18 | |
Разное - Сколько места занимает Vista на жёстком диске? | GSA_GSA | Microsoft Windows Vista | 25 | 02-03-2008 10:58 | |
как посчитать, сколько времени компьютер был выключен? | whiter | Хочу все знать | 7 | 28-02-2004 21:58 |
|