Даже смешно спрашивать, но никак не могу найти Код (Text): CopyFile(AnsiString(("C:\\Program Files\\DrWeb\\")+sr.Name).c_str(),AnsiString(("C:\\Program Files\\DrWeb\\Bases\\")+sr.Name).c_str()); В Билдере компилится и выполняется как надо =) А как соединить строки в Студио ?? Код (Text): CopyFile(("C:\\Program Files\\DrWeb\\%s",sr.cFileName),("C:\\Program Files\\DrWeb\\Bases\\%s",sr.cFileName)); Компилится, но не выполняется как надо =(
Код (Text): std::string path("c:\\program files\\drweb\\"); path += sr.cFileName; std::string path2("c:\\program files\\drweb\\bases\\"); path2 += sr.cFileName; ::CopyFileA(path.c_str(), path2.c_str());
немного поэксперементировав: Код (Text): WIN32_FIND_DATA sr; CreateDirectory("C:\\Program Files\\DrWeb\\Bases",NULL); HANDLE hFind = FindFirstFile("C:\\Program Files\\DrWeb\\drw444*.vdb", &sr); MoveFile(StrCat("C:\\Program Files\\DrWeb\\",sr.cFileName),StrCat("C:\\Program Files\\DrWeb\\Bases\\",sr.cFileName)); while (FindNextFile(hFind, &sr) == 0); MessageBox(NULL,StrCat("C:\\Program Files\\DrWeb\\",sr.cFileName),sr.cFileName,MB_OK); MessageBox(NULL,StrCat("C:\\Program Files\\DrWeb\\Bases\\",sr.cFileName),sr.cFileName,MB_OK); //MoveFile(StrCat("C:\\Program Files\\DrWeb\\",sr.cFileName),StrCat("C:\\Program Files\\DrWeb\\Bases\\",sr.cFileName)); FindClose(hFind); Что странно, так это то что в заголовках окон - всё нормально, то есть имена файлов он получает правильно всегда ... теперь о проблемах : 1) первый файл drw44400.vdb перемещается в туже папку (не \Base) но под именем: 400.vdb 2) далее сообщение с нормальным заголовком и следующим текстом 3) второе сообщение ещё хлеще, но заголовок по прежнему нормальный 4) ну и самое непонятное (ведь в заголовка то всё ок - значит имена он верные получает) это то, что на этом цикл заканчивается!
просто анологичный код на Builder'e сёдня сварганил, терь надо его в студио заставить работать: Код (Text): TSearchRec sr; if (FindFirst("C:\\Program Files\\DrWeb\\drw444*.vdb", faAnyFile | faDirectory, sr) == 0) { MoveFile(AnsiString(("C:\\Program Files\\DrWeb\\")+sr.Name).c_str(),AnsiString(("C:\\Program Files\\DrWeb\\Bases\\")+sr.Name).c_str()); while (FindNext(sr) == 0) MoveFile(AnsiString(("C:\\Program Files\\DrWeb\\")+sr.Name).c_str(),AnsiString(("C:\\Program Files\\DrWeb\\Bases\\")+sr.Name).c_str()); } FindClose(sr); если изменить на !=0, то тоже тока один файл, но на этот раз последний StrCat опять выдаёт полную ерунду
Код (Text): WIN32_FIND_DATA ffd; DWORD dwError=0; HANDLE hFind = INVALID_HANDLE_VALUE; // Find the first file in the directory. hFind = FindFirstFile("C:\\Program Files\\DrWeb\\drw444*.vdb", &ffd); if (INVALID_HANDLE_VALUE == hFind) { ErrorHandler(TEXT("FindFirstFile")); return dwError; } // List all the files in the directory with some info about them. do { MessageBox(NULL,ffd.cFileName, "Ошибка", MB_OK); } while (FindNextFile(hFind, &ffd) != 0); нарезка из msdn отлично перечисляет все файлы, но если сделать вот так: Код (Text): MessageBox(NULL,StrCat("C:\\Program Files\\DrWeb\\",ffd.cFileName), "Ошибка", MB_OK); то сообщение начинает накапливать имена =(, т.е. путь остаётся прежним C:\Program Files\DrWeb, а вот имя файла начинает расти (склеиваться с предыдущим) как сделать?
Код (Text): std::string fname("c:\\program files\\drweb\\"); fname += ffd.cFileName; ::MessageBox(NULL, fname.c_str(), "Error", MB_OK);
censored Ты уже что-то подобное писал - я так и не смог заставить его работать - не понимаю я это конструкции =(