GetLastError возвращает ERROR_FILE_NOT_FOUND, хотя в папке есть файлы попадающие под маску. В чем проблема? Буду благодарен за помощь!
#include <windows.h>
#include <stdio.h>
LPWSTR fileName = L"*.exe";
LPWIN32_FIND_DATAW data32;
HANDLE fileHandle;
int main(){
fileHandle = FindFirstFileW(fileName, data32);
printf("%08x\n", GetLastError());
if(fileHandle != 0){
while(FindNextFileW(fileHandle, data32)){
MessageBoxW(0, data32->cFileName, L"File Found!", 0);
}
}
FindClose(fileHandle);
system("pause");
return 0;
}
Ошибки у вас такие:
1) Используете указатель на структуру WIN32_FIND_DATAW
, но ее не создаете. Поэтому в FindFirstFileW
передается мусор.
2) Ищете *.exe
там, где их нет. Программа запускается в каталоге проекта, а не в каталоге Debug
. Понятно, что поиск исполняемых файлов ничего не вернет. Путь всегда надо задавать явно.
3) Ну и мелочевка вроде присваивания LPWSTR fileName = L"*.exe";
(адрес константы неконстантному указателю).
Вот исправленный вариант (ищет *.*
чтобы понятнее было):
int main() {
LPCWSTR fileName = L"*.*";
WIN32_FIND_DATAW data32;
HANDLE fileHandle;
fileHandle = FindFirstFileW(fileName, &data32);
if(fileHandle != NULL) {
while(FindNextFileW(fileHandle, &data32)){
MessageBoxW(0, data32.cFileName, L"File Found!", 0);
}
FindClose(fileHandle);
}
else
printf("%08x\n", GetLastError());
system("pause");
return 0;
}
Не скажу, что все проблемы в этом, но...
Читаем в описании:
BOOL FindNextFileW(
HANDLE hFindFile,
LPWIN32_FIND_DATAW lpFindFileData
);
lpFindFileData
A pointer to the WIN32_FIND_DATA
structure that receives information about the found file or subdirectory.
Как минимум - где ваша структура?
Подготовьте ее и передайте адрес:
WIN32_FIND_DATA ffd;
...
FindFirstFileW(fileName, &ffd);
Еще - если файл единственный, он будет найден FindFirstFile
(и информация о нем не выведена), а FindNextFile
находить будет уже нечего.
Еще - зачем вам в консольном приложении MessageBox
?
Опять же - если это C++, то почему бы не воспользоваться <filesystem>
?
Написал программу для нахождения в строке( массиве символов ) слова наименьшей длины, и замены этого слова на символ '*'Программа работает,...
Как узнать, имеет ли класс определенного родителя?
Как запретить пользователю вводить в QLineEdit что-либо кроме URL?