Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Старожил


Сообщения: 401
Благодарности: 10

Профиль | Отправить PM | Цитировать


bezumes
К сожалению, под рукой C++ освежить в памяти синтаксис и функции нету, а не программировал на С я давно.
Попробую составить примерный алгоритм на "псевдо-C++" (дикой смеси си и васика).
Код: Выделить весь код
функция ПосчитатьВсеДиски()
  {
  for( int i = 0; i < 26; i++ ) //запускаем цикл с целью опросить все устройства
     {    
        Файлов = 0;
        Папок = 0;
        ПосчитатьКаталог(char("a"+i) + ":\", Файлов, Папок); // char("a"+i) для переносимости не совсем правильно, надо бы массив букв дисков
        printf("На диске %c  %d файлов, %d папок.", char("a"+i), Файлов, Папок);
     }
  }

функция ПосчитатьКаталог(sStartPath, int *nFilesCount, int *nDirsCount)
  {
     hFirstFile = FindFirstFile(sStartPath+"*.*", &wfd); // ищем первый
     while (hFirstFile != INVALID_HANDLE_VALUE) // пока "найдено"
        {
           if(hFirstFile.attr&АттрибутКаталога != 0 && hFirstFile.name != "." && hFirstFile.name != "..") // если это каталог и не ссылки на себя и на предка (под DOS'ом эти условия нужны были; кстати, будет ли работать под Win без него?)
              {
                 nDirsCount++;
                 ПосчитатьКаталог(sStartPath+hFirstFile.name, &nFilesCount, &nDirsCount); // рекурсия для найденного подкаталога
              }
           else
               // если это не каталог, знач файл
               nFilesCount++;
           FindNextFile(hFirstFile, &wfd); // ищем следующий
        };
  };
Уф... Надеюсь основную мысль я выразить смог и перевести в нормальный Си у вас получится.

to All
Ногами не пинать! На си не пишу уже давно... Деградировал до VBA и 1С

-------
Успехов.

Это сообщение посчитали полезным следующие участники:

Отправлено: 17:00, 19-12-2006 | #7