| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Как получить все файлы в папке? |
| Автор: Ortistx 25.4.2011, 22:13 |
| Здравствуйте. Создаю консольное приложение в MS Visual Studio. На данном этапе разработки программы необходимо: после ввода пути к папке в качестве параметра, определить какие файлы находятся в данной папке. Собственно вопрос. Как можно получить список файлов, которые находятся в папке? Заранее спасибо. |
| Автор: bsa 25.4.2011, 22:28 |
| FindFirstFile/FindNextFile |
| Автор: Ortistx 27.4.2011, 21:31 |
| Спасибо. Но компилятор ругается на строчку hFind = FindFirstFile("C:\\Windows\\*.exe", &FindData); Error 1 error C2664: 'FindFirstFileW' : cannot convert parameter 1 from 'const char [17]' to 'LPCWSTR' D:\CPP\find_dile\find_dile\find.cpp 19 Error 2 IntelliSense: argument of type "const char *" is incompatible with parameter of type "LPCWSTR" d:\cpp\find_dile\find_dile\find.cpp 19 |
| Автор: boostcoder 27.4.2011, 21:41 |
| FindFirstFile(L"C:\\Windows\\*.exe", &FindData); |
| Автор: Ortistx 27.4.2011, 22:01 |
| Спасибо большое. Получилось. А Вы могли бы объяснить что делает "L"? и где об этом преобразовании можно почитать? Добавлено через 2 минуты и 17 секунд Нет, не получилось. Почему-то вместо имени файлов выводятся адреса... |
| Автор: boostcoder 27.4.2011, 22:25 |
потому что ты юникодную строку пытаешься вывести в стандартный поток? ;) |
| Автор: Ortistx 27.4.2011, 22:27 |
| А как надо сделать? Что делает буковка L? Надо перед выводом преобразовать строку как-то? |
| Автор: boostcoder 27.4.2011, 23:01 |
покажи как выводишь. это: http://en.wikibooks.org/wiki/Windows_Programming/Unicode |
| Автор: Ortistx 27.4.2011, 23:07 | ||
Собственно вот моя программа:
В папке "a" лежит 5 файлов. Он мне почему-то выводит 5 одинаковых строчек (хотя имена файлов естественно разные): 0039F77C 0039F77C 0039F77C 0039F77C 0039F77C Вообще мне все названия файлов нужно будет сохранить куда-нибудь, например в строковый массив. Хотя размер его неизвестен будет...Как тут лучше поступить? Куда записать имена файлов, чтобы потом с ними можно было бы работать как со строками? |
| Автор: boostcoder 27.4.2011, 23:14 |
| во первых - в опциях проекта отключи поддержку юникода. так: http://clip2net.com/clip/m47996/1303935165-cliptt2979-27kb.png во вторых - список файлов можно хранить в std::http://cplusplus.com/reference/stl/vector/<std::http://cplusplus.com/reference/string/string/> |
| Автор: Ortistx 27.4.2011, 23:21 |
| Отключил, получилось, показывает список файлов. Спасибо. А лучше во всех проектах по умолчанию отключать поддержку юникода? |
| Автор: boostcoder 27.4.2011, 23:38 |
очень зависит. |
| Автор: xvr 28.4.2011, 11:21 | ||||
Ау, модераторы! А можно, куда нибудь в шапку раздела прибить большими гвоздями -
А то достало уже, честное слово. Каждая 5я тема об этом |
| Автор: bsa 28.4.2011, 11:44 |
| xvr, создай соответствующую тему - прикреплю |
| Автор: Ortistx 28.4.2011, 15:56 | ||
Я слышал такое мнение, что отключать поддержку юникода - плохой тон.
У меня на все это компилятор ругается. Надо что-то подключать? |
| Автор: bsa 28.4.2011, 15:59 |
| #include <windows.h> |
| Автор: Ortistx 28.4.2011, 16:00 |
| Подключил его. Может это из-за того, что приложение консольное? |
| Автор: bsa 28.4.2011, 16:03 |
| Ortistx, http://msdn.microsoft.com/ru-ru/library/c426s321.aspx |
| Автор: Ortistx 28.4.2011, 17:06 | ||
| bsa, спасибо. Попробовал использовать _findfirst и _findnext. Не получилось. Выводит имя только 1 файла. Почему так? Вот код:
|
| Автор: xvr 28.4.2011, 19:51 | ||
Вы описание на _findfirst/_findnext читали? Видимо нет
|
| Автор: Ortistx 28.4.2011, 21:10 |
| Да, спасибо, уже прочитал и разобрался Программа получилась, всем спасибо за помощь! |
| Автор: bsa 29.4.2011, 11:12 | ||
|