@Sasha294

Как можно подставить другой путь к диску через метод FindFirstFileW?

TCHAR szFileName[255];
	GetModuleFileName(NULL, szFileName, 255);// диск  szFileName

	WIN32_FIND_DATAW wfd;
	
	HANDLE const hFind = FindFirstFileW(L"D:\\report\\*", &wfd); //место д подставить другой

	setlocale(LC_ALL, "");

	if (INVALID_HANDLE_VALUE != hFind)
	{
		do
		{
			std::wcout << &wfd.cFileName[0] << std::endl;
		} while (NULL != FindNextFileW(hFind, &wfd));

		FindClose(hFind);
	}
  • Вопрос задан
  • 78 просмотров
Пригласить эксперта
Ответы на вопрос 2
@BadElectrician
C++ это хобби
Используй двойной массив и цикл
char path[3][256]; char *ppath[3];
path[0]=“c:\catalog\...”;
...
path[3]=“f:\....”;
for(int i =0;i!=3;i++){
pparh[i]=path[i];
h = _findfirst(ppath[i],&info);
....
}
Ответ написан
Комментировать
@Sumor
Если вы используете TCHAR, то вместо FindFirstFileW нужно использовать FindFirstFile.
TCHAR это в зависимости от настроек препроцессора или char, или wchar_t.
Соответственно функции WinApi в зависимости от этой настройки сами выбирают какую версию ansi или unicode вызывать.
Условно, вы можете использовать char, вызывать GetModuleFileNameA и FindFirstFileA.
Или, если у вас только unicode: использовать wchar_t, вызывать GetModuleFileNameW и FindFirstFileW.
Или, как делает большинство, использовать универсальный тип TCHAR, вызывать GetModuleFileName и FindFirstFile. Компилятор сам выберет какую версию ansi или unicode использовать.

К сожалению для консоли Microsoft не придумал tcout, поэтому нужно в зависимости от параметра препроцессора выбирать консоль, например так:
#if defined(UNICODE) || defined(_UNICODE)
#define tcout std::wcout
#else
#define tcout std::cout
#endif
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы