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

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

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

Author24 — интернет-сервис помощи студентам
Задача чуть другая, но напишите такой пример пожалуйста.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.04.2011, 23:02
Ответы с готовыми решениями:

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

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

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

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

13
9 / 9 / 0
Регистрация: 05.04.2011
Сообщений: 67
09.04.2011, 01:26 2
Цитата Сообщение от AlexSun Посмотреть сообщение
Задача чуть другая, но напишите такой пример пожалуйста.
по подробней можно????
0
23 / 21 / 4
Регистрация: 03.11.2010
Сообщений: 169
09.04.2011, 11:37  [ТС] 3
Обычный Си, мне нужно занести список файлов с нужной папки с указанным расширением в массив.
От Вас прошу показать как вывести в консоль весь список файлов например из "./files", остальное сам допишу
0
2851 / 1999 / 987
Регистрация: 21.12.2010
Сообщений: 3,705
Записей в блоге: 10
09.04.2011, 11:56 4
можно использовать маску
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 5
Скорее всего, Линукс.

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

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

Не по теме:


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

0
23 / 21 / 4
Регистрация: 03.11.2010
Сообщений: 169
09.04.2011, 12:05  [ТС] 8
Цитата Сообщение от 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 9
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 10
Цитата Сообщение от Subgrando Посмотреть сообщение
std::cout это то же самое, что и printf, но без форматирования
Subgrando, не совсем верно. std::cout может работать как и в форматированном режиме( если пользуемся оператором << ), так и без форматирования ( метод write ), в данном случае как раз таки форматированный вывод.
0
23 / 21 / 4
Регистрация: 03.11.2010
Сообщений: 169
09.04.2011, 14:25  [ТС] 11
Со всем разобрался. Вот как-то так:
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  [ТС] 12
А как вывести только папки?
0
2851 / 1999 / 987
Регистрация: 21.12.2010
Сообщений: 3,705
Записей в блоге: 10
14.04.2011, 23:17 13
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
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,680
15.04.2011, 01:06 14
Эта херь рекурсивно выводит файлы *.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
15.04.2011, 01:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.04.2011, 01:06
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru