Как подставить в FindFirstFile букву? [закрыт]

229
17 февраля 2019, 01:10
WCHAR szFileName[255];
GetModuleFileName(NULL, szFileName, 255);// диск 
WIN32_FIND_DATAW wfd;
HANDLE const hFind = FindFirstFileW(L"С:\\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);

В примере указано что диск С но нужно менять в индивидуальном порядке как можно это сделать чтоб указывало?

Answer 1

Вопрос сложный, в том смысле, что сложно понять, в чем состоит ваша проблема. Придется угадывать.

Чтобы заменить диск C на другой, достаточно просто поменять букву в строке. Например, вместо L"С:\\report\\*" можно написать L"D:\\kompot\\*.*" или L"Z:\\kefir\\*.*".

Строку для поиска можно создавать и динамически. Например

WCHAR szPath[] = L"C:\\reports\\*.*";
szPath[0] = L'E';  // На самом деле мы хотим не C:, а E:
. . .
HANDLE hFind = ::FindFirstFile(szPath, ...

Или, вот например, вы зачем-то получили путь к текущей программе в szFileName, который нигде не используете. Можно на его основе сделать поиск всех текстовых файлов, которые содержатся в каталоге программы.

WCHAR szFileName[MAX_PATH];
GetModuleFileName(NULL, szFileName, MAX_PATH);  // Путь к себе
LPWSTR p = wcsrchr(szFileName, L'\\');          // Найти позицию последней \
*(++p) = L'\0';                                 // Переместить указатель за \ и обрезать строку
wcscat(szFileName, L"*.txt");                   // Хотим найти все файлы .txt в каталоге программы
HANDLE hFind = ::FindFirstFile(szFileName, ...

Вот как-то так.

READ ALSO
Как хранятся структуры в памяти?

Как хранятся структуры в памяти?

Прочитал, что поля структуры хранятся в памяти последовательно(в порядке объявления) (+- платформзависимое выравнивание)

243
Функция gets_s не работает

Функция gets_s не работает

Перемещение функции gets_s из тела функции main в тело функции INPUT приводит к ошибке"Отсутствуют экземпляры перегруженная функция 'gets_s' соответствующие...

1270
Задача с покупкой продуктов

Задача с покупкой продуктов

Падает задача выдавая Runtime errorПри этом на тестовом примере работает правильно

205
Ошибка Index out of range в QVector

Ошибка Index out of range в QVector

pointsOfGrid заполняются нормально, не мусором, maxRadius - аналогичноОшибка возникает при попытке установить QCPCurveData ума не приложу что делать

267