Проблемы MoveFile

Тема в разделе "WASM.BEGINNERS", создана пользователем BadLogin, 29 апр 2009.

  1. BadLogin

    BadLogin Серёга =)

    Публикаций:
    0
    Регистрация:
    9 окт 2008
    Сообщения:
    82
    Адрес:
    Сайнт-Пи
    Даже смешно спрашивать, но никак не могу найти

    Код (Text):
    1. CopyFile(AnsiString(("C:\\Program Files\\DrWeb\\")+sr.Name).c_str(),AnsiString(("C:\\Program Files\\DrWeb\\Bases\\")+sr.Name).c_str());
    В Билдере компилится и выполняется как надо =)

    А как соединить строки в Студио ??

    Код (Text):
    1. CopyFile(("C:\\Program Files\\DrWeb\\%s",sr.cFileName),("C:\\Program Files\\DrWeb\\Bases\\%s",sr.cFileName));
    Компилится, но не выполняется как надо =(
     
  2. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    Код (Text):
    1. std::string path("c:\\program files\\drweb\\");
    2. path += sr.cFileName;
    3. std::string path2("c:\\program files\\drweb\\bases\\");
    4. path2 += sr.cFileName;
    5. ::CopyFileA(path.c_str(), path2.c_str());
     
  3. BadLogin

    BadLogin Серёга =)

    Публикаций:
    0
    Регистрация:
    9 окт 2008
    Сообщения:
    82
    Адрес:
    Сайнт-Пи
    немного поэксперементировав:
    Код (Text):
    1. WIN32_FIND_DATA sr;
    2. CreateDirectory("C:\\Program Files\\DrWeb\\Bases",NULL);
    3. HANDLE hFind = FindFirstFile("C:\\Program Files\\DrWeb\\drw444*.vdb", &sr);
    4. MoveFile(StrCat("C:\\Program Files\\DrWeb\\",sr.cFileName),StrCat("C:\\Program Files\\DrWeb\\Bases\\",sr.cFileName));
    5. while (FindNextFile(hFind, &sr) == 0);
    6. MessageBox(NULL,StrCat("C:\\Program Files\\DrWeb\\",sr.cFileName),sr.cFileName,MB_OK);
    7. MessageBox(NULL,StrCat("C:\\Program Files\\DrWeb\\Bases\\",sr.cFileName),sr.cFileName,MB_OK);
    8. //MoveFile(StrCat("C:\\Program Files\\DrWeb\\",sr.cFileName),StrCat("C:\\Program Files\\DrWeb\\Bases\\",sr.cFileName));
    9. FindClose(hFind);
    Что странно, так это то что в заголовках окон - всё нормально, то есть имена файлов он получает правильно всегда ... теперь о проблемах :
    1) первый файл drw44400.vdb перемещается в туже папку (не \Base) но под именем: 400.vdb
    2) далее сообщение с нормальным заголовком и следующим текстом
    3) второе сообщение ещё хлеще, но заголовок по прежнему нормальный
    4) ну и самое непонятное (ведь в заголовка то всё ок - значит имена он верные получает) это то, что на этом цикл заканчивается!
     
  4. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
     
  5. BadLogin

    BadLogin Серёга =)

    Публикаций:
    0
    Регистрация:
    9 окт 2008
    Сообщения:
    82
    Адрес:
    Сайнт-Пи
    просто анологичный код на Builder'e сёдня сварганил, терь надо его в студио заставить работать:
    Код (Text):
    1. TSearchRec sr;
    2. if (FindFirst("C:\\Program Files\\DrWeb\\drw444*.vdb", faAnyFile | faDirectory, sr) == 0)
    3. {
    4. MoveFile(AnsiString(("C:\\Program Files\\DrWeb\\")+sr.Name).c_str(),AnsiString(("C:\\Program Files\\DrWeb\\Bases\\")+sr.Name).c_str());
    5. while (FindNext(sr) == 0)
    6. MoveFile(AnsiString(("C:\\Program Files\\DrWeb\\")+sr.Name).c_str(),AnsiString(("C:\\Program Files\\DrWeb\\Bases\\")+sr.Name).c_str());
    7. }
    8. FindClose(sr);
    если изменить на !=0, то тоже тока один файл, но на этот раз последний
    StrCat опять выдаёт полную ерунду
     
  6. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    AnsiString часть borland'ского RTL (VCL?). В ANSI C/C++ нету, так же как и TSearchRec.
     
  7. BadLogin

    BadLogin Серёга =)

    Публикаций:
    0
    Регистрация:
    9 окт 2008
    Сообщения:
    82
    Адрес:
    Сайнт-Пи
    Код (Text):
    1. WIN32_FIND_DATA ffd;
    2. DWORD dwError=0;
    3. HANDLE hFind = INVALID_HANDLE_VALUE;
    4.    // Find the first file in the directory.
    5. hFind = FindFirstFile("C:\\Program Files\\DrWeb\\drw444*.vdb", &ffd);
    6.    if (INVALID_HANDLE_VALUE == hFind)
    7.    {
    8.       ErrorHandler(TEXT("FindFirstFile"));
    9.       return dwError;
    10.    }
    11. // List all the files in the directory with some info about them.
    12.    do
    13.    {
    14.        MessageBox(NULL,ffd.cFileName, "Ошибка", MB_OK);
    15.    }
    16.    while (FindNextFile(hFind, &ffd) != 0);
    нарезка из msdn отлично перечисляет все файлы, но если сделать вот так:

    Код (Text):
    1. MessageBox(NULL,StrCat("C:\\Program Files\\DrWeb\\",ffd.cFileName), "Ошибка", MB_OK);
    то сообщение начинает накапливать имена =(, т.е. путь остаётся прежним C:\Program Files\DrWeb, а вот имя файла начинает расти (склеиваться с предыдущим)

    как сделать?
     
  8. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    Код (Text):
    1. std::string fname("c:\\program files\\drweb\\");
    2. fname += ffd.cFileName;
    3. ::MessageBox(NULL, fname.c_str(), "Error", MB_OK);
     
  9. BadLogin

    BadLogin Серёга =)

    Публикаций:
    0
    Регистрация:
    9 окт 2008
    Сообщения:
    82
    Адрес:
    Сайнт-Пи
    censored
    Ты уже что-то подобное писал - я так и не смог заставить его работать - не понимаю я это конструкции =(
     
  10. BadLogin

    BadLogin Серёга =)

    Публикаций:
    0
    Регистрация:
    9 окт 2008
    Сообщения:
    82
    Адрес:
    Сайнт-Пи
    Код (Text):
    1. std::string
    не нашёл я никакого толкового описания этой конструкции ...
     
  11. ntcdm

    ntcdm New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2007
    Сообщения:
    247
    рекоемндую использовать MFC класс CString, он похож на бормановский
     
  12. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    спсибо поржал.