Здравствуйте, avsokolov, Вы писали:
A>2. В чем ошибка следующего кода: A> WIN32_FIND_DATA FindFileData; A> HANDLE hFind = INVALID_HANDLE_VALUE; A> wchar_t dir[MAX_PATH]; A> GetSystemDirectory(dir, MAX_PATH); A> wcout<<dir<<endl; A> wcout<<"vvedite dir:"<<endl; wcin>>>dir; A> wcout<<"you have entered:"<<endl<<dir<<endl; A> hFind=FindFirstFile(dir,&FindFileData); A> if(hFind = INVALID_HANDLE_VALUE) A> { A> cout<<"we did not find it...."<<endl; A> cout<<FindFileData.cFileName<<endl; A> }
A>При запуске я получаю результат:
A>E:\WINDOWS\system32 A>vvedite dir: A>E:\windows\system32 A>you have entered: A>E:\windows\system32 A>we did not find it.... A>0012FD3C
A>Т.е. я ввожу имя каталога, который 100% существует, но функция FindFirstFile его не находит.
Прошу прощения: if(hFind = INVALID_HANDLE_VALUE) в данном случае "=" — это опечатка? Или так в проге и есть?
Здравствуйте, avsokolov, Вы писали:
A>вы правы, а я второй день сижу с этим и не могу найти проблему.... черт.... надо было cout<<hFind; сделать перед проверкой... A>спасибо за ответ!
А ещё не надо предупреждения компилятора отключать
Здравствуйте, hybride, Вы писали:
A>> hFind=FindFirstFile(dir,&FindFileData); A>> if(hFind = INVALID_HANDLE_VALUE) A>> { A>> cout<<"we did not find it...."<<endl; A>> cout<<FindFileData.cFileName<<endl; A>> }
H>Прошу прощения: if(hFind = INVALID_HANDLE_VALUE) в данном случае "=" — это опечатка? Или так в проге и есть?
Что-то не понятно. Даже если принять этот вариант
if(hFind = INVALID_HANDLE_VALUE)
переменная FindFileData всеравно должна содержать имя "WINDOWS..."!
Здравствуйте, Чили, Вы писали:
Ч>Здравствуйте, hybride, Вы писали:
A>>> hFind=FindFirstFile(dir,&FindFileData); A>>> if(hFind = INVALID_HANDLE_VALUE) A>>> { A>>> cout<<"we did not find it...."<<endl; A>>> cout<<FindFileData.cFileName<<endl; A>>> }
H>>Прошу прощения: if(hFind = INVALID_HANDLE_VALUE) в данном случае "=" — это опечатка? Или так в проге и есть? Ч>Что-то не понятно. Даже если принять этот вариант
if(hFind = INVALID_HANDLE_VALUE)
Ч>переменная FindFileData всеравно должна содержать имя "WINDOWS..."!
она содержит это имя и выводит его:
we did not find it.... 0012FD3C
точнее выводит адрес начала массива unsigned short'ов FindFileData.cFileName
это из-за того, что wchar_t не является встроенным типом (либо компилер не поддерживает его либо настройки надо изменить)
Здравствуйте, kankan, Вы писали:
Ч>>K>точнее выводит адрес начала массива unsigned short'ов FindFileData.cFileName K>это из-за того, что wchar_t не является встроенным типом (либо компилер не поддерживает его либо настройки надо изменить)
вот вродебы рабочий код, немного исправленный:
WIN32_FIND_DATA FindFileData;
HANDLE hFind = INVALID_HANDLE_VALUE;
wchar_t dir[MAX_PATH];
GetSystemDirectory(dir, MAX_PATH);
wcout<<dir<<endl;
wcout<<"vvedite dir:"<<endl; wcin>>dir;
wcout<<"you have entered:"<<endl<<dir<<endl<<(LPWSTR)dir<<endl;
hFind=FindFirstFile(dir,&FindFileData);
if(hFind == INVALID_HANDLE_VALUE)
{
cout<<"we did not find it...."<<endl<<dir<<endl;
cout<<FindFileData.cFileName<<endl;
}
wcout<<"the name of the dir is:"<<endl<<FindFileData.cFileName<<endl;
while (FindNextFile(hFind, &FindFileData) != 0)
{
wcout<<"the next name is:"<<endl<<FindFileData.cFileName<<endl;
}
wcout<<"The error is:"<<GetLastError()<<endl;
вопрос, я ввожу путь к папке, в которой содержатся как файлы, так идругие файлы,
почему FindNextFile всегда возвращает ошибку,
код ошибки: 18, это: "Больше файлов не осталось"...
и еще один вопрос, в одном из постов выше, говорилось про отключения уведомления компилятора... где это можно посмотреть? я использую по умолчанию настройи, вручную ничего не менял
Здравствуйте, kankan, Вы писали:
K>Здравствуйте, Чили, Вы писали:
Ч>>Здравствуйте, hybride, Вы писали:
A>>>> hFind=FindFirstFile(dir,&FindFileData); A>>>> if(hFind = INVALID_HANDLE_VALUE) A>>>> { A>>>> cout<<"we did not find it...."<<endl; A>>>> cout<<FindFileData.cFileName<<endl; A>>>> }
H>>>Прошу прощения: if(hFind = INVALID_HANDLE_VALUE) в данном случае "=" — это опечатка? Или так в проге и есть? Ч>>Что-то не понятно. Даже если принять этот вариант
if(hFind = INVALID_HANDLE_VALUE)
Ч>>переменная FindFileData всеравно должна содержать имя "WINDOWS..."!
K>она содержит это имя и выводит его:
K>
K>we did not find it....
K>0012FD3C
K>точнее выводит адрес начала массива unsigned short'ов FindFileData.cFileName K>это из-за того, что wchar_t не является встроенным типом (либо компилер не поддерживает его либо настройки надо изменить)
не, чуток не то:
шобы выводилось имя диры нормально надо юзать не std::cout а std::wcout
Здравствуйте, avsokolov, Вы писали:
A>вопрос, я ввожу путь к папке, в которой содержатся как файлы, так идругие файлы, A>почему FindNextFile всегда возвращает ошибку, A>код ошибки: 18, это: "Больше файлов не осталось"...
FindFirstFile/FindNextFile ищет по маске. у тя скорей всего маска типа "C:\tmp", для поиска всех папок и файлов в этой дире надо юзать маску "c:\tmp\*"
A>и еще один вопрос, в одном из постов выше, говорилось про отключения уведомления компилятора... где это можно посмотреть? я использую по умолчанию настройи, вручную ничего не менял
если юзаешь MS VS, то Project > Properties > C/C++ > General > Warning Level