Использование библиотеки BOOST C++: Boost.Filesystem
Использование библиотеке Boost.Filesystem - один из наиболее простых и правильных (IMHO) путей решения задачи. Недостатками (по сравнению с вызовом функций API Win32 или .NET Framework) может быть отсутствие поддержки UNICODE (впрочем, авторы настаивают на обоснованности такого ограничения - см. FAQ), главным достоинством - работа на разных платформах. Тем не менее, Boost.Filesystem используется как базовый инструмент для локального паука проекта поисковой машины - набора классов, с помощью которых организуется рекурсивный обход каталогов, распаковка архивов и обработка файлов. Паук поисковой машины - это гораздо более мощный механизм для перебора файлов с разными дополнительными условиями, фильтрами и т.д., но по сути его основой является приведенный ниже простой код.
Такой же подход используется в утилите для обработки html-страниц (очистка от мусора) HTML_ZIP.
Проект для C Builder 6.0 (3.5 Kb zip)
Реализация для MS DOS и Turbo C++ 3.1
Во времена господства недооперационной системы MSDOS реализация такой операции, как рекурсивный обход каталогов, требовал либо вызова системного прерывания 21h MS DOS, либо поиска в документации по конкретному компилятору C функций-оберток (это не стандартизированные C вызовы, поэтому фантазию разработчиков библиотек ничто не останавливало). Для Turbo C++ 3.1 в API были функции _dos_findfirst и _dos_findnext, с помощью которых и решалась задача. Далее приводится пример программы (исходные коды и скомпилированный файл). Следует иметь в виду, что ожидать от данных функций поддержки длинных имен файлов и нормальной работы с национальными символами в именах файлов не стоит.
Проект для Turbo C++ 3.1 (3Кб zip)
Реализация для .NET Framework
Среда .NET предлагает собственные, относительно удобные средства работы с каталогами и файлами. Рекурсивный обход каталогов организуется очень легко - с использованием API функций System::IO::Directory::GetFiles и System::IO::Directory::GetDirectories. Обратите внимание, что (как и весь фреймворк) манипуляции происходят с юникод-именами, поэтому специально заботиться о представлении кириллицы не нужно (для Boost.Filesystem это, напротив, является определенной проблемой).
Проект для MS VisualStudio 2003 (5.6 Kb)
Последние изменения 04.06.2005
© Mental Computing 2010