Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.61/174: Рейтинг темы: голосов - 174, средняя оценка - 4.61
AlexSun
18 / 16 / 4
Регистрация: 03.11.2010
Сообщений: 169
1

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

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

Задача чуть другая, но напишите такой пример пожалуйста.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.04.2011, 23:02
Ответы с готовыми решениями:

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

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

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

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

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

13
Uxxzz
9 / 9 / 0
Регистрация: 05.04.2011
Сообщений: 67
09.04.2011, 01:26 2
Цитата Сообщение от AlexSun Посмотреть сообщение
Задача чуть другая, но напишите такой пример пожалуйста.
по подробней можно????
0
AlexSun
18 / 16 / 4
Регистрация: 03.11.2010
Сообщений: 169
09.04.2011, 11:37  [ТС] 3
Обычный Си, мне нужно занести список файлов с нужной папки с указанным расширением в массив.
От Вас прошу показать как вывести в консоль весь список файлов например из "./files", остальное сам допишу
0
igorrr37
2036 / 1601 / 799
Регистрация: 21.12.2010
Сообщений: 2,751
Записей в блоге: 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
09.04.2011, 11:56
Subgrando
40 / 40 / 9
Регистрация: 28.01.2011
Сообщений: 175
09.04.2011, 11:59 5
Скорее всего, Линукс.

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

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

Не по теме:


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

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

Не по теме:


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

В С++ вроде как больше функций и свои фишки синтаксиса
0
Subgrando
40 / 40 / 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
Ma3a
Эксперт С++
619 / 463 / 57
Регистрация: 28.01.2011
Сообщений: 605
09.04.2011, 12:15 10
Цитата Сообщение от Subgrando Посмотреть сообщение
std::cout это то же самое, что и printf, но без форматирования
Subgrando, не совсем верно. std::cout может работать как и в форматированном режиме( если пользуемся оператором << ), так и без форматирования ( метод write ), в данном случае как раз таки форматированный вывод.
0
AlexSun
18 / 16 / 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, спасибо Вам еще раз.
1
AlexSun
18 / 16 / 4
Регистрация: 03.11.2010
Сообщений: 169
14.04.2011, 22:48  [ТС] 12
А как вывести только папки?
0
igorrr37
2036 / 1601 / 799
Регистрация: 21.12.2010
Сообщений: 2,751
Записей в блоге: 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
kravam
быдлокодер
1712 / 899 / 106
Регистрация: 04.06.2008
Сообщений: 5,588
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.04.2011, 01:06

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

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

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


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

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

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