Короче, проблема в том, что не получается попадать в другие диски и папки(выше чем лежит исполняемый файл).
И вообще сильное ощущение, что написана функция очень криво и не правильно. Подскажите как бы ее переписать корректно
bool Search_File(TCHAR *buffer, char mas[])
{
HANDLE file;
WIN32_FIND_DATA ffd = {0};
TCHAR temp[MAX_PATH];
TCHAR str[MAX_PATH];
SetCurrentDirectory(buffer);//текуций католог
file = FindFirstFile(TEXT(mas),&ffd);
if (file == INVALID_HANDLE_VALUE) {
cout <<"Файл не был найден"<<endl;
return false;
}
else{
do{
if(!strcmp(ffd.cFileName, TEXT("."))||!strcmp(ffd.cFileName,
TEXT(".."))){
continue;
}
if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){//если не
установлен бит, тогда файл
strcpy(temp, buffer);
strcat(temp, "\\");
strcat(temp, ffd.cFileName);
Search_File(buffer, mas);
strcpy(buffer, temp);
continue;
}
cout<<"найденый файл:"<<ffd.cFileName<<endl;
}
while(FindNextFile(file,&ffd) != 0);
}
FindClose(file);
return true;
}
Обратите внимание на следующие моменты:
Во-первых, неправильно используется функция SetCurrentDirectory(), что чревато дальнейшими ошибками по мере роста кода программы. Дело в том, что текущий каталог - это глобальная переменная процесса и изменять ее таким образом, в одной из рабочих функций, и тем более - не восстанавливать - некорректная практика. Если имеем дело с многопоточным приложением и в разных потоках используются файловые операции (а как правило в больших программах именно так и происходит - ведутся протоколы, логи, багрепорты, считываются/записываются опции и т.п.), то хаотичное изменение текущего каталога недопустимо. Если эта функция используется, то обычно в момент инициализации программы при запуске и большинство (если не все) файловых операций осуществляются по относительным путям (относительно текущего).
Поэтому рекомендую убрать из функции вызов SetCurrentDirectory() и передавать на вход функции Search_File() полный путь + маска искомого файла (помним, что в FindFirstFile() можно использовать символы * и ?) или образовывать этот полный путь динамически путем присоединения внутри функции mas[] к buffer.
Во-вторых, в определенных случаях (когда целевое имя содержит подстановочные символы, точку или имя каталога) необходимо иметь права доступа к корневому каталогу и ко всем подкаталогам в поисковом пути для успешного поиска.
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Дана шеренга из n психовКаждому психу дан идентификатор от 1 до n На каждом ходе каждый псих, имеющий идентификатор больше, чем у психа справа...
Как сделать такую анимацию пагинации перемещения точек элементов между числами 01, 02 , 03 , 04 ?