|
Как в C++ получить список файлов в каталоге. | ☑ | ||
---|---|---|---|---|
0
megabax
26.02.17
✎
15:24
|
Добрый день. подскажите пожалуйста, как в С++ получить список файлов в каталоге. Делаю так:
#include "stdafx.h" #include <opencv2/opencv.hpp> #include <vector> #include <iostream> #include <stdio.h> #include <stdlib.h> #include "Core.h" #include <Windows.h> #include <conio.h> using namespace std; using namespace cv; FILE* fp; int main(int argc, char *argv[]) { WIN32_FIND_DATA FindFileData; HANDLE hf; LPCWSTR s = L"d:\\3\\*.jpg"; hf = FindFirstFile(s, &FindFileData); if (hf != INVALID_HANDLE_VALUE) { do { printf("%s\n", FindFileData.cFileName); } while (FindNextFile(hf, &FindFileData) != 0); FindClose(hf); } getch(); return 0; ... И в ответ получаю кучу ошибок типа: Серьезность Код Описание Проект Файл Строка Состояние подавления Ошибка (активно) "ACCESS_MASK" не является однозначным BlaSimulator c:\Program Files (x86)\Windows Kits\8.1\Include\um\winioctl.h 5644 Если закоментить #include <Windows.h> ошибки исчезают, но тогда недоступно FindFirstFile. Подскажите,пожалуйста, есть ли другой способ или как заставить нормально инклюдиться <Windows.h> ? |
|||
1
lock19
26.02.17
✎
16:35
|
Если бы я с каждым затыком задавал вопрос на форумах, интернет бы уже переполнился.
|
|||
2
Dotoshin
26.02.17
✎
17:18
|
||||
3
Фрэнки
26.02.17
✎
17:21
|
посмотреть "как можно" можно. Но не очень интересно, т.к. твои включаемые файлы говорят о том, что там включена винда. Ну так смотри в подсказке этой среды разработчика, в которой сидишь.
Есть статья https://habrahabr.ru/company/microsoft/blog/155619/ мелксофт выкупил имя мсдн.ру и оно теперь приводит на ссылки типа той, что в (2) второй ссылкой. Прикрывается лавочка халявного программинга на форточках, увы. |
|||
4
ERWINS
26.02.17
✎
17:25
|
никак
в стандарте с++ такой функции нет |
|||
5
spock
26.02.17
✎
17:27
|
(1) Там так не считают: http://stackoverflow.com/
|
|||
6
lock19
26.02.17
✎
17:31
|
(5) В подавляющем большинстве случаев достаточно полистать этот самый stackoverflow. Так же бывают специфические вопросы, которые мало кто решал.
А товарищ из (0) очень смахивает на тролля. |
|||
7
Помогите
26.02.17
✎
17:32
|
(3) >> Прикрывается лавочка халявного программинга на форточках, увы.
откуда такие выводы? |
|||
8
trdm
26.02.17
✎
17:39
|
(0) Обязательно на WIN API лабать? МФЦ есть, есть и многое другое.
|
|||
9
Фрэнки
26.02.17
✎
17:40
|
(7) винда маст дай - все выводы только оттуда
|
|||
10
jsmith82
26.02.17
✎
17:47
|
вин апи, мфц.. старьё
нет фрейморк string[] dirs = Directory.GetDirectories(path); |
|||
11
jsmith82
26.02.17
✎
17:47
|
то есть
string[] files = Directory.GetFiles(path); |
|||
12
trdm
26.02.17
✎
17:50
|
Пишем правильно:
#define начал { #define кончил } #define УРОДСТВО HANDLE #define сматываемся return #define НИФИГА 0 #define СТРИНГИ LPCWSTR int main(int argc, char *argv[]) начал WIN32_FIND_DATA FindFileData; УРОДСТВО hf; СТРИНГИ s = L"d:\\3\\*.jpg"; hf = FindFirstFile(s, &FindFileData); if (hf != INVALID_HANDLE_VALUE) начал do начал printf("%s\n", FindFileData.cFileName); кончил while (FindNextFile(hf, &FindFileData) != НИФИГА); FindClose(hf); кончил getch(); сматываемся НИФИГА; кончил |
|||
13
spock
26.02.17
✎
17:52
|
Еще обсуждается что ли? о_О
http://stackoverflow.com/questions/306533/how-do-i-get-a-list-of-files-in-a-directory-in-c |
|||
14
jsmith82
26.02.17
✎
17:52
|
(12) Всё это речитативом под смачный бит
|
|||
15
lock19
26.02.17
✎
17:52
|
(11)
#include <boost/filesystem.hpp> #include <iostream> using namespace boost::filesystem; int main() { path p = current_path(); directory_iterator it{p}; while (it != directory_iterator{}) std::cout << *it++ << '\n'; } |
|||
16
lock19
26.02.17
✎
17:54
|
В следующих главах ждём вопросов об установке буста на винду.
|
|||
17
Провинциальный 1сник
26.02.17
✎
17:59
|
||||
18
Провинциальный 1сник
26.02.17
✎
18:00
|
(17) То есть удали "using namespace std;" и попробуй.
|
|||
19
trdm
26.02.17
✎
18:02
|
QApplication::processEvents();
QDir dir(QString::fromUtf8("d:\\3\\")); QString mask = "*.jpg"; QStringList listFiles = dir.entryList(mask.split(" "), QDir::Files); QStringList li; foreach (QString file, listFiles) { li->append(dir.absoluteFilePath(file)); } |
|||
20
trdm
26.02.17
✎
18:27
|
Последние 4 строчки - лишние.
|
|||
22
Serginio1
26.02.17
✎
18:47
|
#include "Util.h"
// Function to check the endig of a string bool HasEnding(wstring const &fullString, wstring const &ending) { if (fullString.length() >= ending.length()) return (0 == fullString.compare(fullString.length() - ending.length(), ending.length(), ending)); else return false; } // Function to list all files in a specific directory with a specified pattern vector<wstring> ListFilesInDirectoryByPattern(LPCWSTR directoryName) { WIN32_FIND_DATA FindFileData; HANDLE hFind = ::FindFirstFile(directoryName, &FindFileData); vector<wstring> result; result.push_back(wstring(FindFileData.cFileName)); while (FindNextFile(hFind, &FindFileData)) result.push_back(wstring(FindFileData.cFileName)); return result; } |
|||
23
jsmith82
26.02.17
✎
19:06
|
Посоны, а чо за древние библиотеки? Qt ещё приплели. Это потому что линух? На линухе годноты нет?
|
|||
24
Провинциальный 1сник
26.02.17
✎
19:29
|
(23) Если писать на чистом винапи - то будет работать везде, даже под линуксом в вайне.
|
|||
25
NorthWind
26.02.17
✎
20:57
|
в С++Builder я искал файлы точно таким способом, как ТС. Все работало.
TPtr <TStringList> slFileList = new TStringList (); for (int iDay = FScanDaysTo; iDay >= FScanDaysFrom; iDay --) { (FBillDate + iDay).DecodeDate(&yy, &mm, &dd); // формируем маску для поиска String FileName = sFolder + String ().sprintf ("recadv_%04u%02u%02u*.xml", yy, mm, dd); WIN32_FIND_DATA fd; HANDLE hFF = FindFirstFile (FileName.c_str (), &fd); if (hFF != INVALID_HANDLE_VALUE) { slFileList->Add (fd.cFileName); for (bool fResult = true; fResult;) { fResult = FindNextFile (hFF, &fd); if (fResult) slFileList->Add (fd.cFileName); } FindClose (hFF); } } |
|||
26
organizm
26.02.17
✎
21:06
|
boost рулит.
а так можно getcwd |
|||
27
NorthWind
26.02.17
✎
21:12
|
сказать честно, я не очень понимаю - если пишешь под винду, то почему стандартные виндовые способы не работают. Единственное что приходит в голову - ACCESS_MASK где-то в других хидерах объявлен ранее чем в windows.h. (0) - попробуй оставить только те хидеры, которые нужны. В данном случае нужно windows.h, stdio.h, conio.h (для getch()) и вроде больше ничего. Неймспейсы от std и cv тоже убери от греха подальше. И посмотри, как соберется.
|
|||
28
NorthWind
26.02.17
✎
21:22
|
еще не очень понятно - у вас строка с маской юникодная (LPCWSTR), а передаете вы ее зачем-то в неюникодную функцию (FindFirstFile вместо FindFirstFileW). Ну да здесь дело не в этом. Хидеры убирайте и смотрите что будет получаться.
|
|||
29
Помогите
01.03.17
✎
17:11
|
(9) Она уже больше 20 лет как маст дай. Но как связаны твои пожелания с действительностью?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |