Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
kostikes
0 / 0 / 0
Регистрация: 07.05.2013
Сообщений: 3
1

Найти и вывести все файлы имя которых начинается с указанной буквы

27.05.2013, 22:32. Просмотров 1490. Ответов 4
Метки нет (Все метки)

Доброго времени суток.
Помогите с лабой пож-та. Дан только этот код. Как я понимаю эта программа рекурсивно ищет конкретный файл по названию во всех подпапках. Мне же нужно: Найти и вывести все файлы (со всех подпапок) имя которых начинается с указанной буквы.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
 
 
void PrintFileLocations(char const*StartDir, char const*FileName);
 
int main(int argc, char *argv[])
{
    char fname[256]="1.txt", dirname[256]="D:\\Home";
    PrintFileLocations(dirname, fname);
    system("PAUSE");
    return EXIT_SUCCESS;
}
 
void PrintFileLocations(char const*StartDir, char const*FileName)
{
    DIR    *dp = opendir (StartDir);
// Граничное условие: если StartDir это не папка,
// то нет в ней файлов с именем FileName
    if (dp == NULL)
    {
        return ;
    }
    else
    {
        struct dirent *ep;
        while (ep = readdir (dp))
        {
            if( strcmp(ep->d_name, "." ) ==0 || strcmp(ep->d_name, ".." ) ==0)
                continue;
        // Проверяем каждый элемент из папки и , если его имя
        // совпало с FileName - выводим путь и увеличиваем счётчик
            if(strcmp(FileName, ep->d_name)==0)
            {
                printf("%s\\%s\n", StartDir, ep->d_name);
            }
        // Рекурсивно ищем, предполагая, что данный элемент является папкой
            char *newDir=(char*)
                malloc(sizeof(char)*(strlen(StartDir)+strlen(ep->d_name)+2));
            strcpy(newDir, StartDir);
            strcat(newDir, "\\");
            strcat(newDir, ep->d_name);
            PrintFileLocations(newDir, FileName);
            free(newDir);
        }
        closedir (dp);
    }
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.05.2013, 22:32
Ответы с готовыми решениями:

Подсчитать, сколько слов начинается с указанной буквы
uses crt; var c,s:string; k,j:integer; t:text; begin writeln('Vvedite bukvu'); ...

Текстовые файлы. Подсчитать, сколько слов начинается с указанной буквы
Даны файл, содержащий текст на русском языке, и некоторая буква. Подсчитать, сколько слов...

Процедуры и функции: Вывести все английские слова, русский перевод которых начинается с буквы Б, Ц, Я
Словарь на 20 слов задан в виде последовательности английских и русских слов: А1,...А20 -...

Определить те продукты название которых начинается с указанной буквы и остаток на складе не менее 5
продукты в магазине характеризуют названием, ценой, и количеством остатка на складе определить те...

Посчитать, сколько слов начинается с указанной буквы и вывести соответствующее сообщение в другой файл
Дан файл, содержащий текст, и некоторая буква. Посчитать, сколько слов начинается с указанной буквы...

4
anmartex
...
1715 / 1208 / 908
Регистрация: 12.02.2013
Сообщений: 1,981
28.05.2013, 08:47 2
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>
#include <sys/stat.h>
 
void PrintFileLocations(char const* dirname, char ch)
{
   DIR* dir = opendir(dirname);
 
   if (dir == NULL)
   {
      perror(dirname);
      return;
   }
 
   char filename[MAX_PATH];
 
   struct dirent* path;
   struct stat info;
   while ((path = readdir(dir)) != NULL)
   {
      if (strcmp(path->d_name, ".") == 0 || strcmp(path->d_name, "..") == 0)
      {
         continue;
      }
      sprintf(filename, "%s\\%s", dirname, path->d_name);
 
      stat(filename, &info);
 
      if(S_ISDIR(info.st_mode))
      {
         PrintFileLocations(filename, ch);
      }
      else if (*path->d_name == ch)
      {
         printf("%s\n", filename);
      }
   }
   closedir(dir);
}
 
int main(int argc, char* argv[])
{
   PrintFileLocations(".", 'a');
   system("pause");
   return EXIT_SUCCESS;
}
1
kostikes
0 / 0 / 0
Регистрация: 07.05.2013
Сообщений: 3
28.05.2013, 15:17  [ТС] 3
Спасибо большое!
А можно закомментировать еще? Хочется разобраться что к чему. Буду очень благодарен!
0
anmartex
...
1715 / 1208 / 908
Регистрация: 12.02.2013
Сообщений: 1,981
28.05.2013, 15:33 4
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>
#include <sys/stat.h>
 
void PrintFileLocations(char const* dirname, char ch)
{
   DIR* dir = opendir(dirname);
 
   // Если директория не может быть открыта
   // констатируем ошибку
   if (dir == NULL)
   {
      perror(dirname);
      return;
   }
 
   // Для хранения полного имени файла
   char filename[MAX_PATH];
 
   // Для хранения основной информации о файле
   struct dirent* path;
   // Для хранения дополнительной информации о файле
   struct stat info;
   // Перебираем все файлы в заданной директории
   while ((path = readdir(dir)) != NULL)
   {
      // Отсеиваем лишнее
      if (strcmp(path->d_name, ".") == 0 || strcmp(path->d_name, "..") == 0)
      {
         continue;
      }
      // Формируем полное имя файла: директория + имя файла
      sprintf(filename, "%s\\%s", dirname, path->d_name);
 
      // Считываем дополнительные атрибуты файла
      stat(filename, &info);
 
      // Если данный файл является директорией
      if(S_ISDIR(info.st_mode))
      {
         // Вызываем нашу функцию для этой директории
         PrintFileLocations(filename, ch);
      }
      // Если имя файла начинается с заданной буквы
      else if (*path->d_name == ch)
      {
         printf("%s\n", filename);
      }
   }
   closedir(dir);
}
 
int main(int argc, char* argv[])
{
   PrintFileLocations(".", 'a');
   system("pause");
   return EXIT_SUCCESS;
}
1
kostikes
0 / 0 / 0
Регистрация: 07.05.2013
Сообщений: 3
28.05.2013, 15:35  [ТС] 5
Огромное спасибо. Все понятно.
0
28.05.2013, 15:35
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.05.2013, 15:35

Вывести все буквы алфавита с конца (буквы Z) до указанной пользователем
Эта программа выводит буквы с начала алфавита и до буквы, которую ввёл пользователь. как её...

Найти все файлы с данным разрешением и вывести их имя и размер
эта программа работает и выдает правильный результат, если файлы *.jpg находятся в папке с...

Вывести на экран всех учащихся, фамилия которых начинается с буквы А
С клавиатуры вводится информация об учащихся: фамилия, имя и оценка по информатике. Вывести на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru