|
44 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 152
|
||||||
Получить список файлов в каталоге30.04.2015, 01:23. Показов 18261. Ответов 18
Метки нет (Все метки)
Здравствуйте!
Мне нужно получить список файлов в каталоге, чтобы потом как-то работать с этими файлами, для начала, отсортировать их по дате, которая есть в названии файла в формате *_ЧЧ.ММ.ГГГГ_*. Во всех видеоуроках и книгах, которые мне попадают, хорошо описан только ввод-вывод из файла. Подскажите, где лучше всего описана работа с файлами в каталоге. Нашёл готовый пример, вроде бы можно воспользоваться, но хотелось бы хорошо понимать, как тут всё работает... Искал HANDLE и WIN32_FIND_DATAA у Б. Пахомова, Т, А. Павловской, Шилдта, Прата, нашёл только у А. Хортона Visual C++ 2010. Полный курс, сказано (handle) это дескриптор, подобие указателя, но что к чему и зачем пока не понимаю. Помогите кто-нибудь объясните, как пример ниже работает, или что прочитать нужно, возможно в моём случае, только для считывания имён файлов из каталога, всё ещё проще чем в примере ниже решается?
0
|
||||||
| 30.04.2015, 01:23 | |
|
Ответы с готовыми решениями:
18
Список файлов в каталоге Вывести список файлов в каталоге Список файлов в указанном каталоге |
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 30.04.2015, 07:54 | |
|
Проще не получится, и так всё просто. В 12-й строке поиск первого, затем в цикле просмотр остальных. Только здесь каталоги отбираются, тебе надо атрибуты файлов задать вместо FILE_ATTRIBUTE_DIRECTORY.
0
|
|
|
44 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 152
|
|
| 30.04.2015, 13:47 [ТС] | |
|
nmcf, А как это правильно сделать? Где лучше об этом прочитать?
0
|
|
|
44 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 152
|
||||||
| 05.05.2015, 15:26 [ТС] | ||||||
|
Ilot, Здравствуйте!
Книгу хорошую подсказали, спасибо, но в процессе изучения ещё вопрос возник... Вариант ниже в переменной k считает директории правильно, вопросов нет, но мне нужны файлы. Когда ставлю FILE_ATTRIBUTE_NORMAL, ничего не считает. Если ставлю FILE_ATTRIBUTE_ARCHIVE, то находит все мои файлы которые мне нужны, но когда смотрю в свойствах файлов, галочки в атрибутах "Только чтение" нет, а в дополнительных атрибутах галка в поле "Файл готов для архивирования" и "Разрешить индексировать содержимое... В чём причина? Файл готов для архивирования - это и есть ARCHIVE? А какие тогда фалы должны находиться если file_attribute_normal записать?
0
|
||||||
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 05.05.2015, 15:55 | |
|
NORMAL - это когда совсем без атрибутов. Сними все флажки в проводнике у файла и попробуй поиск.
1
|
|
|
44 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 152
|
|
| 05.05.2015, 16:21 [ТС] | |
|
nmcf, Здравствуйте!
Тогда ещё вопрос: У меня совсем другая программа пишет информацию в разные файлы на Qpile. Никаких установок в языке по атрибутам файлов нет. Просто пишет по умолчанию как-то и всё данные в том формате в котором я указал. Чем определяются атрибуты файлов в таком случае? Это Windows определяет или что-то ещё? Как эти атрибуты вообще появляются если я никогда нигде явно не указываю их? У меня около 8000 этих файлов и мне надо правильно их обработать, раньше такого никогда не делал...
0
|
|
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 05.05.2015, 16:46 | |
|
Ну архивный атрибут автоматически устанавливается по-видимому, атрибут сжатия может наследоваться от папки или вручную устанавливаться и т. д. Можешь просто взять все атрибуты, связанные с файлами на диске, и так отбирать.
1
|
|
|
44 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 152
|
|||||||||||
| 08.05.2015, 00:38 [ТС] | |||||||||||
|
Здравствуйте!
Подскажите, как в программе выше правильно сделать, чтобы передавать разные маски в FindFirstFileA. Просто объявить, например:
У меня всего пока две разных маски и конечно могу два раза повторить нужный фрагмент программы, но хотелось бы понять, как сделать красиво и правильно...
0
|
|||||||||||
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 08.05.2015, 10:02 | |
|
Вообще-то FindFirstFileA() - это из музея. Пора уже FindFirstFileW() использовать.
1
|
|
|
44 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 152
|
|
| 08.05.2015, 15:17 [ТС] | |
|
Ilot, Здравствуйте!
Подскажите пожалуйста, как правильно это сделать в моём случае? FindFirstFileW() в книге которую мне рекомендовали выше нет, посмотрел Go To Definition, там всё так же как и у FindFirstFileA, это всё, на что ума пока хватило... Можете подсказать, что к чему, где это лучше посмотреть? На разных форумах где упоминается FindFirstFileW() и FindFirstFileA(), понял, только что связано что-то с кодировкой, но примеров понятных для себя не нашёл.
0
|
|
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 08.05.2015, 15:24 | |
|
Программа будет по сути такая же, только с поддержкой Unicode. Вместо char используй wchar_t, вместо string - wstring и т. п.
0
|
|
|
44 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 152
|
|
| 08.05.2015, 16:11 [ТС] | |
|
string - wstring понятно, а где тут char ?
Добавлено через 45 минут Заменил: WIN32_FIND_DATAA findData; на WIN32_FIND_DATAW findData; string... на wstring s = "D:\\temp\\*_??.??.????.csv"; hf = FindFirstFileA(s.c_str(), &findData); на hf = FindFirstFileW(s.c_str(), &findData); while (FindNextFileA(hf, &findData)); на while (FindNextFileW(hf, &findData)); подчёркивает "D:\\temp\\*_??.??.????.csv"; Error 1 error C2440: 'initializing' : cannot convert from 'const char [25]' to 'std::basic_string<wchar_t,std::char_tra its<wchar_t>,std::allocator<wchar_t>>' В чём ошибка?
0
|
|
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
||||||
| 08.05.2015, 18:49 | ||||||
|
Про L у строковых констант не забывай и про W у функций и структур при необходимости.
0
|
||||||
|
44 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 152
|
||||||
| 08.05.2015, 19:43 [ТС] | ||||||
|
Так в результате выдаётся адрес 004FF7FC, а раньше название файла выводилось, что-то ещё не так....
1
|
||||||
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 08.05.2015, 20:02 | |
|
wcout вместо cout.
1
|
|
|
44 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 152
|
|
| 08.05.2015, 20:46 [ТС] | |
|
nmcf, Спасибо, всё работает!
Не сочтите за труд, объясните, такие вещи нужно узнавать и запоминать или как-то легко можно догадаться? Мне когда написали что лучше FindFirstFileW() вместо FindFirstFileA()использовать, то часть я догадался и исправил правильно по подсказкам в VS, но вот L пропустил в wstring s = L"D:\\temp\\*_??.??.????.csv"; и wcout вместо cout, тоже не знал... Это можно было как-то догадаться или найти VisualStudio или только перебирать в сети кучу примеров и смотреть похожие на свою задачу?
0
|
|
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 08.05.2015, 23:20 | |
|
Догадаться о чём? Широкие строки и символы идут с префиксом L - это стандарт. Широкие потоки wcout и wcin тоже есть в С++, если читать не древние книжки.
Есть ещё макрос _T() вроде бы для VS, который зависит от того, включен или нет Unicode в свойствах проекта. Функции тоже будут подставляться соответствующие если явно не указано.
1
|
|
| 08.05.2015, 23:20 | |
|
Помогаю со студенческими работами здесь
19
Вывод на экран список файлов и название программ С++ , находящимся в указанном при запуске программы каталоге Получить список файлов в каталоге
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536
Одним из. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|