Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/377: Рейтинг темы: голосов - 377, средняя оценка - 4.84
23 / 21 / 4
Регистрация: 03.11.2010
Сообщений: 169

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

08.04.2011, 23:02. Показов 73247. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача чуть другая, но напишите такой пример пожалуйста.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.04.2011, 23:02
Ответы с готовыми решениями:

Написать программу, которая обеспечивает:начальное формирование каталога файлов;вывод каталога файлов;удаление файлов...
Уважаемые хакеры!Прошу вашей помощи!Я в СИ не особо шарю.((( А на днях уже сдавать.Очень рассчитываю на любую вашу помощь. Вот задача. ...

Получить список файлов каталога в txt файл
Есть код: WIN32_FIND_DATA FindFileData; HANDLE hf; hf = FindFirstFile(L"C:\\*", &FindFileData); if (hf != INVALID_HANDLE_VALUE) ...

Вывести список файлов и каталогов
Здравствуйте. Почему не работает этот код? Нужно вывести список файлов и папок. #include <iostream> #include...

13
9 / 9 / 0
Регистрация: 05.04.2011
Сообщений: 67
09.04.2011, 01:26
Цитата Сообщение от AlexSun Посмотреть сообщение
Задача чуть другая, но напишите такой пример пожалуйста.
по подробней можно????
0
23 / 21 / 4
Регистрация: 03.11.2010
Сообщений: 169
09.04.2011, 11:37  [ТС]
Обычный Си, мне нужно занести список файлов с нужной папки с указанным расширением в массив.
От Вас прошу показать как вывести в консоль весь список файлов например из "./files", остальное сам допишу
0
 Аватар для igorrr37
2872 / 2019 / 991
Регистрация: 21.12.2010
Сообщений: 3,755
Записей в блоге: 9
09.04.2011, 11:56
можно использовать маску
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<windows.h>
#include<iostream>
 
int main(){
    WIN32_FIND_DATA FindFileData;
    HANDLE hf;
    hf=FindFirstFile("c:\\*", &FindFileData);
    if (hf!=INVALID_HANDLE_VALUE){
        do{
            std::cout << FindFileData.cFileName << "\n";
        }
        while (FindNextFile(hf,&FindFileData)!=0);
        FindClose(hf);
    }
}
6
41 / 41 / 9
Регистрация: 28.01.2011
Сообщений: 175
09.04.2011, 11:59
Скорее всего, Линукс.

http://en.wikipedia.org/wiki/Readdir
0
23 / 21 / 4
Регистрация: 03.11.2010
Сообщений: 169
09.04.2011, 12:00  [ТС]
igorrr37, мне нужен С, а не С++. Но спасибо.

Добавлено через 27 секунд
Subgrando, нет-нет, Windows
0
41 / 41 / 9
Регистрация: 28.01.2011
Сообщений: 175
09.04.2011, 12:02
Цитата Сообщение от AlexSun Посмотреть сообщение
Обычный Си, мне нужно занести список файлов с нужной папки с указанным расширением в массив.
От Вас прошу показать как вывести в консоль весь список файлов например из "./files", остальное сам допишу
Меня сбил этот пост с толку ("обычный", "./files")...
А в коде у igorrr37 ничего такого С++-шного нет.

Не по теме:


А чем отличаются коды С++ и С?

0
23 / 21 / 4
Регистрация: 03.11.2010
Сообщений: 169
09.04.2011, 12:05  [ТС]
Цитата Сообщение от Subgrando Посмотреть сообщение
А в коде у igorrr37 ничего такого С++-шного нет.
C++
1
std::cout << FindFileData.cFileName << "\n";
Например это мне неясно
Перепишите пожалуйста, кому не сложно, с использованием stdio.h
Цитата Сообщение от Subgrando Посмотреть сообщение

Не по теме:


А чем отличаются коды С++ и С?

В С++ вроде как больше функций и свои фишки синтаксиса
0
41 / 41 / 9
Регистрация: 28.01.2011
Сообщений: 175
09.04.2011, 12:10
C++
1
    std::cout << FindFileData.cFileName << "\n";
Просто вывод переменной cFileName (название файла) из структуры FindFileData. А она получена от FindFirstFile.

std::cout это то же самое, что и printf, но без форматирования.
1
Эксперт С++
623 / 467 / 57
Регистрация: 28.01.2011
Сообщений: 605
09.04.2011, 12:15
Цитата Сообщение от Subgrando Посмотреть сообщение
std::cout это то же самое, что и printf, но без форматирования
Subgrando, не совсем верно. std::cout может работать как и в форматированном режиме( если пользуемся оператором << ), так и без форматирования ( метод write ), в данном случае как раз таки форматированный вывод.
0
23 / 21 / 4
Регистрация: 03.11.2010
Сообщений: 169
09.04.2011, 14:25  [ТС]
Со всем разобрался. Вот как-то так:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <windows.h>
#include <conio.h>
int main(){
    WIN32_FIND_DATA FindFileData;
    HANDLE hf;
    hf = FindFirstFile(".\\*.exe",&FindFileData);
    if(hf != INVALID_HANDLE_VALUE){
        do{
            printf("%s\n",FindFileData.cFileName);
        }
        while(FindNextFile(hf,&FindFileData) != 0);
        FindClose(hf);
    }
    getch();
    return 0;
}
igorrr37, спасибо Вам еще раз.
2
23 / 21 / 4
Регистрация: 03.11.2010
Сообщений: 169
14.04.2011, 22:48  [ТС]
А как вывести только папки?
0
 Аватар для igorrr37
2872 / 2019 / 991
Регистрация: 21.12.2010
Сообщений: 3,755
Записей в блоге: 9
14.04.2011, 23:17
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <windows.h>
 
int main(){
        WIN32_FIND_DATA FindFileData;
        HANDLE hf = FindFirstFile("c:\\*",&FindFileData);
        if(hf != INVALID_HANDLE_VALUE){
                do{
                    if(FindFileData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
                        printf("%s\n",FindFileData.cFileName);
 
                }
                while(FindNextFile(hf,&FindFileData));
                FindClose(hf);
        }
        return 0;
}
1
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
15.04.2011, 01:06
Эта херь рекурсивно выводит файлы *.exe из указанной папки, разбирайся, на комменты внимание не обращай, писал для себя. Код не мой если чё, я просто шлифанул его мелким напильником, хе-хе
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include <windows.h>
#include <stdio.h>
 
long int rez= 0;
 
void GetFileList(LPTSTR sPath, LPTSTR sExt, LPTSTR sEXT);
 
int main(){
 
//Поскольку sPath и sExt и sEXT одинаковы во всех вызовах GetFileList, их можно было бы сделать
//глобальными, но я так оставил. 
        char sPath[MAX_PATH]= "E:\\Microsoft_Visual_Studio_9.0";
//        char sPath[MAX_PATH]= "C:\\vso_moio";
//        char sPath[MAX_PATH]= "C:\\vso_moio";
 
//Обратить  внимание на размер массива!
        char sExt[10]= "exe";
        char sEXT[10]= "EXE";
        GetFileList(sPath, sExt, sEXT);
//Портит всё дело: Если перенаправлять в файл с консоли, то полуачается, что в консол ведут 
//запись два разных потока- тот,который нужент и этот,который записывает "Для продлжения нажмите любую
//клавишу" и эта надпись вклинивается в серёдку и портит всё дело
      printf("rez= %d\n", rez);
  system ("PAUSE");
}
 
void GetFileList(LPTSTR sPath, LPTSTR sExt, LPTSTR sEXT) {
 
 WIN32_FIND_DATA pFILEDATA;
 
 HANDLE hFile = FindFirstFile(strcat(sPath,"\\*.*"),&pFILEDATA);
 
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!Необходимо именно здесь прописывать длину пути!!!!!!!!!!!!!!!!!!!!!!!
 sPath[strlen(sPath) - strlen(strstr(sPath,"*.*"))] = '\0';
//Если пропишем после if (как предлагает Юра), то тогда, если вдруг натыкаемся на системную директорию
// или файл, то FindFirstFile возвращает -1. Следовательно, всё, что выплнняется по условию
//(hFile!=INVALID_HANDLE_VALUE) не выолнится и в частности, не будет поставлен конец строки!
//А это значит, что по выходу из  рекурсивной функции GetFileList в том месте, где мы восстанавливаем
//Длину, она будет восстановлена неправильно
 if (hFile!=INVALID_HANDLE_VALUE)    {
  char * chBuf;
  //sPath[strlen(sPath) - strlen(strstr(sPath,"*.*"))] = '\0';
  do {
   //Пропускаем . и ..
   if (strlen(pFILEDATA.cFileName) == 1 &&  strchr(pFILEDATA.cFileName,'.') !=NULL)
    if (FindNextFile(hFile,&pFILEDATA) == 0)
      break;
   if (strlen(pFILEDATA.cFileName) == 2 && strstr(pFILEDATA.cFileName,"..") !=NULL)
    if(FindNextFile(hFile,&pFILEDATA) == 0)
      break;
     //Если нашли директорию, запускаем поиск в ней рекурсивный поиск
   if(pFILEDATA.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
     GetFileList(strcat(sPath,pFILEDATA.cFileName), sExt, sEXT);
 
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!оБЯЗАТЕЛЬН востанавливать дллину пути................................     
     sPath[strlen(sPath) - strlen(pFILEDATA.cFileName)- 1] = '\0';
   }
   else {
    //Проверяем на соотвествие sExt расширения pFILEDATA.cFileName
    if((chBuf = strrchr(pFILEDATA.cFileName,'.'))) {
     if(strstr(chBuf + 1,sExt)|| strstr(chBuf + 1,sEXT)) {
      //Если не будем использовать CharToOem() то на экране русский шрифт каракулями выйдет
      CharToOem(sPath,sPath);
      printf("%s",sPath);
      OemToChar(sPath,sPath);
      CharToOem(pFILEDATA.cFileName,pFILEDATA.cFileName);
      printf("%s\n",pFILEDATA.cFileName);
      rez++;
     }
    }
   }
  }
  while (FindNextFile(hFile,&pFILEDATA));
 }
}
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.04.2011, 01:06
Помогаю со студенческими работами здесь

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

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

Вывести список файлов указанного расширения в указанной папке в вектор
Необходимо вывести список состоящий из названий файлов указанного расширения (например .txt) в узнанной папке (например Fils/) в вектор...

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

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


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru