проблема при работе с директориями
От: avsokolov  
Дата: 06.09.07 17:58
Оценка:
2. В чем ошибка следующего кода:
    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;
    hFind=FindFirstFile(dir,&FindFileData);
    if(hFind = INVALID_HANDLE_VALUE)
    {
        cout<<"we did not find it...."<<endl;
        cout<<FindFileData.cFileName<<endl;
    }

При запуске я получаю результат:
E:\WINDOWS\system32
vvedite dir:
E:\windows\system32
you have entered:
E:\windows\system32
we did not find it....
0012FD3C

Т.е. я ввожу имя каталога, который 100% существует, но функция FindFirstFile его не находит.
добавлена разметка — Кодт
07.09.07 11:12: Перенесено модератором из 'C/C++' — Кодт
07.09.07 11:15: Перенесено модератором из 'WIN API' — оказывается, вопрос всё-таки по С++, а не по API — Кодт
Re: проблема при работе с директориями
От: hybride  
Дата: 06.09.07 18:07
Оценка:
Здравствуйте, 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) в данном случае "=" — это опечатка? Или так в проге и есть?
Re[2]: проблема при работе с директориями
От: avsokolov  
Дата: 06.09.07 18:31
Оценка:
Здравствуйте, hybride, Вы писали:

H>Прошу прощения: if(hFind = INVALID_HANDLE_VALUE) в данном случае "=" — это опечатка? Или так в проге и есть?


вы правы, а я второй день сижу с этим и не могу найти проблему.... черт.... надо было cout<<hFind; сделать перед проверкой...
спасибо за ответ!
Re[3]: проблема при работе с директориями
От: ArtDenis Россия  
Дата: 06.09.07 19:30
Оценка:
Здравствуйте, avsokolov, Вы писали:

A>вы правы, а я второй день сижу с этим и не могу найти проблему.... черт.... надо было cout<<hFind; сделать перед проверкой...

A>спасибо за ответ!

А ещё не надо предупреждения компилятора отключать
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re[2]: проблема при работе с директориями
От: Чили Россия  
Дата: 07.09.07 06:36
Оценка:
Здравствуйте, 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..."!
Re[3]: проблема при работе с директориями
От: kankan Украина  
Дата: 07.09.07 07:14
Оценка:
Здравствуйте, Чили, Вы писали:

Ч>Здравствуйте, 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 не является встроенным типом (либо компилер не поддерживает его либо настройки надо изменить)
Re[4]: проблема при работе с директориями
От: avsokolov  
Дата: 07.09.07 14:36
Оценка:
Здравствуйте, 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, это: "Больше файлов не осталось"...

и еще один вопрос, в одном из постов выше, говорилось про отключения уведомления компилятора... где это можно посмотреть? я использую по умолчанию настройи, вручную ничего не менял
Re[4]: проблема при работе с директориями
От: kankan Украина  
Дата: 07.09.07 14:54
Оценка:
Здравствуйте, 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
Re[5]: проблема при работе с директориями
От: kankan Украина  
Дата: 07.09.07 15:02
Оценка:
Здравствуйте, avsokolov, Вы писали:

A>вопрос, я ввожу путь к папке, в которой содержатся как файлы, так идругие файлы,

A>почему FindNextFile всегда возвращает ошибку,
A>код ошибки: 18, это: "Больше файлов не осталось"...

FindFirstFile/FindNextFile ищет по маске. у тя скорей всего маска типа "C:\tmp", для поиска всех папок и файлов в этой дире надо юзать маску "c:\tmp\*"

A>и еще один вопрос, в одном из постов выше, говорилось про отключения уведомления компилятора... где это можно посмотреть? я использую по умолчанию настройи, вручную ничего не менял


если юзаешь MS VS, то Project > Properties > C/C++ > General > Warning Level
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.