Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Вадим77
1 / 1 / 6
Регистрация: 21.04.2016
Сообщений: 104
#1

Вывести список файлов и каталогов - C++

29.06.2017, 14:29. Просмотров 419. Ответов 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
#include <iostream>
#include <Windows.h>  
 
using namespace std;
 
FILE* fp;
 
 
int main(int argc, char *argv[])
{
 
    WIN32_FIND_DATA FindFileData;
    HANDLE hf;
    LPCWSTR s = L"c:\\*.*";
    hf = FindFirstFile(s, &FindFileData);
    if (hf != INVALID_HANDLE_VALUE) {
        do {
            printf("%s\n", FindFileData.cFileName);
        } while (FindNextFile(hf, &FindFileData) != 0);
        FindClose(hf);
    }
 
    system("pause");
    return 0;
}
Выводит список:
$
b
B
D
G
h
I
L
M
p
P
P
P
P
R
s
S
U
W
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.06.2017, 14:29
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Вывести список файлов и каталогов (C++):

Вывести на экран список файлов и каталогов в текущей директории
Помогите написать программу, работающую в текстовом режиме (ширина экрана равна...

Вывести список файлов в каталоге
Напишите программу, которая составляет список файлов, расположенных в каталоге,...

Вывести список файлов каталога
Задача чуть другая, но напишите такой пример пожалуйста.

Удаление файлов из каталогов
Помогите написать программу, которая позволяет удалять из каталога =(( Вот...

Сортировка каталогов и файлов
Нужно создать программу выполняющую сортировку каталогов и файлов различными...

Вывести список всех файлов из указанной директории, имена которых содержат русские буквы
Доброго времени суток, данная программа написана, но, помогите понять, как...

4
h3mbr0
290 / 100 / 28
Регистрация: 12.03.2012
Сообщений: 407
29.06.2017, 14:31 #2
в printf %s заменить на %S
либо сам printf на wprintf
1
Вадим77
1 / 1 / 6
Регистрация: 21.04.2016
Сообщений: 104
29.06.2017, 15:08  [ТС] #3
Добавлено через 35 минут
Поторопился я с ответом. Помогло конечно. Когда ввожу другой путь - пусто. А на диске d: выдает не все каталоги
0
h3mbr0
290 / 100 / 28
Регистрация: 12.03.2012
Сообщений: 407
29.06.2017, 17:01 #4
В каком смысле не все? Если имеете ввиду подкаталоги, то для каждого нужно выполнять проход рекурсивно

Добавлено через 15 минут
Вот это когда-то писал для подсчета файлов, нетрудно переделать ее для распечатки:
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
static int_fast32_t CountFilesInDir(const wchar_t *path) {
  int_fast32_t count = 0;
 
  size_t len = wcsnlen_s(path, MAX_PATH + 1);
  if (len == 0 || len > MAX_PATH)
    return -1;
 
  wchar_t dir[MAX_PATH + 1];
  if (wcscpy_s(dir, MAX_PATH + 1, path) != 0 || PathAddBackslashW(dir) == NULL || wcscat_s(dir, MAX_PATH + 1, L"*") != 0)
    return -1;
 
  len = wcsnlen_s(dir, MAX_PATH + 1) - 1;
 
  WIN32_FIND_DATAW ffd;
  HANDLE hFind = FindFirstFileW(dir, &ffd);
  if (hFind == INVALID_HANDLE_VALUE)
    return -1;
 
  do {
    if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) // count files in subfolder
    {
      if (wcscmp(ffd.cFileName, L".") != 0 && wcscmp(ffd.cFileName, L"..") != 0) {
        dir[len] = L'\0'; // trunc dir to base path
        if (wcscat_s(dir, MAX_PATH + 1, ffd.cFileName) != 0)
          return -1;
 
        int_fast32_t sub_count = CountFilesInDir(dir);
        if (sub_count < 0)
          return -1;
        else
          count += sub_count;
      }
    } else
      count++;
  } while (FindNextFileW(hFind, &ffd) != 0);
 
  return count;
}
единственная проблема - работает с путями не длиннее MAX_PATH
1
Вадим77
1 / 1 / 6
Регистрация: 21.04.2016
Сообщений: 104
29.06.2017, 18:22  [ТС] #5
Например там каталогов 20, а показывает в консоли 10.
0
29.06.2017, 18:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.06.2017, 18:22
Привет! Вот еще темы с решениями:

Вывести список всех файлов из указанной директории, имена которых содержат русские буквы
Помогите с заданием, заранее спасибо! Вывести список всех файлов из...

Вывести на экран в текущем каталоге имена тех каталогов, которые в себе не содержат подкаталогов
Здравствуйте.. Выдали данное задание на С++ под linux Разработать программу,...

Вводится число N. Создать список его делителей и вывести список на экран
#include&lt;iostream&gt; #include&lt;stdio.h&gt; #include&lt;malloc.h&gt; #include&lt;string.h&gt;...

Упорядочить список студентов по среднему баллу и вывести весь список
форумчане,выдает ошибку :( столько маюсь с задачей уже #include &lt;vcl.h&gt;...


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

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

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