Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Blueeyer
12 / 12 / 1
Регистрация: 09.10.2013
Сообщений: 222
#1

Поиск всех файлов в папке и вывод их имен - C++

24.03.2014, 23:07. Просмотров 1254. Ответов 9
Метки нет (Все метки)

Пытаюсь сделать программку, которая будет выводить название всех файлов формата .txt в определенной папке, но что-то не могу разобраться с FindFirstFile / FindNextFile и в интернете подробно ничего как-то не описывается. Может у кого-нибудь есть материал по этой теме, хочется разобраться.

Добавлено через 1 минуту
P.S забыл написать, что надо для Visual Studio
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.03.2014, 23:07     Поиск всех файлов в папке и вывод их имен
Посмотрите здесь:

Получение имен файлов директории в массив C++
Поиск всех файлов C++
C++ Получить список имен файлов в порядке возрастания количества слов в них
Как можно сделать цикл проверки всех файлов в одной папке C++
C++ Чтение исходных файлов С++ и вывод имен тех, что содержат директиву #include
C++ Контейнер set. Найти имена всех файлов в папке
Как прочитать последовательно все текстовые файлы лежащие в папке, не зная заранее их имен? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Убежденный
Системный программист
Эксперт С++
14917 / 6735 / 1059
Регистрация: 02.05.2013
Сообщений: 11,020
Завершенные тесты: 1
24.03.2014, 23:11     Поиск всех файлов в папке и вывод их имен #2
Цитата Сообщение от Blueeyer Посмотреть сообщение
что-то не могу разобраться с FindFirstFile / FindNextFile и в интернете подробно ничего как-то не описывается.
Неправда !
Первая ссылка в Гугле ведет на сайт MSDN, а там ссылка на
пример использования. Как-то даже неудобно копировать сюда,
настолько легко ищется...
Blueeyer
12 / 12 / 1
Регистрация: 09.10.2013
Сообщений: 222
24.03.2014, 23:28  [ТС]     Поиск всех файлов в папке и вывод их имен #3
да, я смотрел это, но особо ничего не понял хотелось бы что-то на русском и с примерами различных коротеньких программок
Убежденный
Системный программист
Эксперт С++
14917 / 6735 / 1059
Регистрация: 02.05.2013
Сообщений: 11,020
Завершенные тесты: 1
24.03.2014, 23:34     Поиск всех файлов в папке и вывод их имен #4
Попробуйте тогда поиск по Киберфоруму.
Blueeyer
12 / 12 / 1
Регистрация: 09.10.2013
Сообщений: 222
25.03.2014, 00:01  [ТС]     Поиск всех файлов в папке и вывод их имен #5
Начал разбираться с этой темой, однако возникло несколько проблем.
1) c:\users\anton\documents\visual studio 2010\projects\findfirst\findfirst\main.cpp(11): error C2664: 'FindFirstFileW' : cannot convert parameter 1 from 'const char [7]' to 'LPCWSTR'

- если в настройках поменять Use Unicode Character Set на Not Selected - тогда работает.
В чем дело и не возникнет ли дополнительных проблем,если я оставлю Not Selected?

2) При запуске программы вместо названий картинок выводится куча таких символов: MMMMMMMMMMMMMMMMMMMMM
- Однако, если найти эту программку в папке Debug, в проектах, и запустить её - она нормально выводит названия всех картинок. Как с этим бороться?

Вот сам код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <windows.h> 
#include <iostream> 
using namespace std;
 
int main()
{
    setlocale(LC_ALL,"Russian");
    WIN32_FIND_DATA findImg;
// Нахождение самого первого файла
    HANDLE hFind = FindFirstFile("*.jpg", &findImg);
    cout << findImg.cFileName << endl;
// Поиск других файлов
    while (FindNextFile(hFind, &findImg)){
        cout << findImg.cFileName << endl;
    }
// Закрыть потом файла
    FindClose(hFind);
 
    system("PAUSE");
    return 0;
}
Blueeyer
12 / 12 / 1
Регистрация: 09.10.2013
Сообщений: 222
25.03.2014, 00:03  [ТС]     Поиск всех файлов в папке и вывод их имен #6
http://www.cyberforum.ru/attachment....1&d=1395691358
Миниатюры
Поиск всех файлов в папке и вывод их имен  
Убежденный
Системный программист
Эксперт С++
14917 / 6735 / 1059
Регистрация: 02.05.2013
Сообщений: 11,020
Завершенные тесты: 1
25.03.2014, 00:06     Поиск всех файлов в папке и вывод их имен #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Blueeyer Посмотреть сообщение
если в настройках поменять Use Unicode Character Set на Not Selected - тогда работает.
В чем дело и не возникнет ли дополнительных проблем,если я оставлю Not Selected?
Возникнет. Обязательно возникнет, как только Вы начнете запускать
свое приложение на других локализациях Windows, либо работать с
символами из других, не латинских алфавитов. Лучше оставляйте
везде Юникод и используйте "широкие" строки - wstring, wchar_t,
LPWSTR, FindFirstFileW, WIN32_FIND_DATAW и т.д.

Цитата Сообщение от Blueeyer Посмотреть сообщение
2) При запуске программы вместо названий картинок выводится куча таких символов: [][][][][][][][][][][]
- Однако, если найти эту программку в папке Debug, в проектах, и запустить её - она нормально выводит названия всех картинок. Как с этим бороться?
Это особенности работы Виндовой консоли.
В общем случае они вообще не решаются.
Но для частных случаев есть хорошие рецепты:
Русские шрифты в консоли

Добавлено через 1 минуту
Цитата Сообщение от Blueeyer Посмотреть сообщение
C++
1
2
HANDLE hFind = FindFirstFile("*.jpg", &findImg);
cout << findImg.cFileName << endl;
А где проверка ошибок ?
Если в FindFirstFile не задать путь, она будет искать в текущей папке.
А это может быть вовсе не та папка, где находится exe.
В общем, всегда проверяйте возвращаемые значения (и еще
GetLastError может помочь).
Blueeyer
12 / 12 / 1
Регистрация: 09.10.2013
Сообщений: 222
25.03.2014, 00:21  [ТС]     Поиск всех файлов в папке и вывод их имен #8
Большое спасибо за помощь! А можно маленький примерчик с GetLastError?

Добавлено через 9 минут
И как сделать, чтоб выбивало ошибку, если не найден ни один файл данного типа?
Убежденный
Системный программист
Эксперт С++
14917 / 6735 / 1059
Регистрация: 02.05.2013
Сообщений: 11,020
Завершенные тесты: 1
25.03.2014, 09:23     Поиск всех файлов в папке и вывод их имен #9
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Blueeyer Посмотреть сообщение
Большое спасибо за помощь! А можно маленький примерчик с GetLastError?
Ну например, FindFirstFile в случае ошибки возвращает INVALID_HANDLE_VALUE.
Но как узнать, что это была за ошибка ? Вот тут и нужен вызов GetLastError.
По документации, если файл не найден, last error будет равным ERROR_FILE_NOT_FOUND.
А в случае какой другой ошибки код тоже будет другим (например, ERROR_ACCESS_DENIED в
случае отсутствия доступа к нужной директории).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.03.2014, 12:37     Поиск всех файлов в папке и вывод их имен
Еще ссылки по теме:

C++ Поиск файлов c расширением ".jpg" в папке
C++ Считывание файлов в папке с++
C++ Удалить из имен обычных файлов (regular file) все цифры
C++ Поиск файлов и вывод как в каталоге DIR
Реализовать поиск в указанном каталоге всех файлов во всех поддиректориях и сформировать XML в нужном формате C++

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

Или воспользуйтесь поиском по форуму:
Blueeyer
12 / 12 / 1
Регистрация: 09.10.2013
Сообщений: 222
25.03.2014, 12:37  [ТС]     Поиск всех файлов в папке и вывод их имен #10
Огромное спасибо Вам! Очень помогло.
Yandex
Объявления
25.03.2014, 12:37     Поиск всех файлов в папке и вывод их имен
Ответ Создать тему
Опции темы

Текущее время: 19:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru