Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.03.2012, 13:54   #1
Fastex
Пользователь
 
Регистрация: 02.12.2010
Сообщений: 29
Вопрос Рекурсивно обойти поддерево файловой системы

Есть задача: Рекурсивно обойти поддерево файловой системы программой на C. Проблема в том, что не могу сдвинуться с места. Застрял на том, что не могу понять какие функции надо использовать для обхода.

Алгоритм функции вроде как определил:
Функция{Просмотриваю заданную папку. Смотрю в ней все содержимое, например, 1 файл и 1 папка. Смотрю на первый объект - файл, произвожу действия с ним (по заданию поиск текста, но это не важно), смотрю на второй объект - папка. Дальше вызываю функцию еще раз , но в качестве параметра - новая найденная папка.}

Но вот как открыть папку и рассматривать в ней объекты (файлы и другие подпапки) ?

Нашел пример в справочных материалах:
Код:
#include <dirent.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

void scandir(char *dirname)
	{
		DIR *dir;
		struct dirent *ent;

		printf("Чтение '%s':\n",dirname);

		if ((dir = opendir(dirname)) == NULL)
			{
				perror("Ошибка 1");
				exit(1);
			}
		while ((ent = readdir(dir)) != NULL)
			{
				printf("%s",dirname);
				printf("%s\n",ent->d_ino);
			}

		if (closedir(dir) != 0)
			{
				perror("Ошибка 2");
			}
	}

void main()
	{
		scandir("C:\\");
		getch();
	}
Тут просматривается корень диска C:\, но папок не видно, тока файлы. Как лазить по папкам ? Какими функциями ?
Если можно, на примере с комментами.

Всем заранее спасибо.
Fastex вне форума Ответить с цитированием
Старый 24.03.2012, 00:23   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Не очень красиво, но, вроде, работает)
Выводит список файлов.
Переменная deep отвечает на сколько каталогов вглубь углубляться.
Код:
#include <dirent.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>

void scandir(char *dirname, int deep)
{
    if (deep==0)
        return 0;
    DIR *dir;
    struct dirent *ent;

    printf("Read of '%s':\n",dirname);

    if ((dir = opendir(dirname)) == NULL)
    {
        perror("error 1");
        exit(1);
    }
    while ((ent = readdir(dir)) != NULL)
    {
        if (strcmp(ent->d_name,".")&&strcmp(ent->d_name,".."))
        {
            char s[255];
            s[0]='\0';
            strcat(s,dirname);
            strcat(s,ent->d_name);
            if (opendir(s)==NULL)
            {
                printf("%s",dirname);
                printf("%s\n",ent->d_name);
            }
            else
            {
                strcat(s,"\\");
                scandir(s,deep-1);
            }
        }
    }
    if (closedir(dir) != 0)
    {
        perror("error 2");
    }
    return;
}

void main()
{
    scandir("C:\\",2);
    getchar;
    return 0;
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Драйвер файловой системы vedro-compota Общие вопросы C/C++ 2 26.01.2012 21:50
Delphi и подобие файловой системы boostadv Общие вопросы Delphi 5 10.12.2010 09:55
Драйвер фильтр файловой системы zumm Общие вопросы C/C++ 1 09.11.2010 18:47
Устройство файловой системы Alexandr-vi-92 Операционные системы общие вопросы 2 06.11.2008 08:14