Прикольный баг с MoveFile/CopyFile.

Тема в разделе "WASM.HEAP", создана пользователем Guest, 12 апр 2007.

  1. Guest

    Guest Guest

    Публикаций:
    0
    Прикольный баг с MoveFile/CopyFile. Требовалось скопировать файл (текущий exe) и запустить его. При копировании файла в директорию с большим числом файлов (MoveFile юзает FindFirstFile/FindNextFile) он создавался с вероятностью 5%. Такое впечатление что после завершения функции в которой юзается MoveFile, запрос отменялся. В итоге после вызова MoveFile добавил цикл вида while (GetFileAttributes(szFile) == -1UL) {Sleep(500);} и все заработало. Неужели MoveFile создает паралельный поток? Как такое объяснить, ведь это не нормально. - на XP SP2
     
  2. comrade

    comrade Константин Ёпрст

    Публикаций:
    0
    Регистрация:
    16 сен 2002
    Сообщения:
    232
    Адрес:
    Russian Federation
    What did MoveFile return after you called it?
     
  3. Guest

    Guest Guest

    Публикаций:
    0
    It returns TRUE, but a file will be created in 0.5-1 sec.
     
  4. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    да. там вроде создаецо поток. в MoveFileWithProgress варианте ф-ии, даже колбек можно ставить для получения прогресса выполнения..
     
  5. HoBleen

    HoBleen New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    77
    Тогда уж
    Код (Text):
    1. while (CloseHandle(CreateFile(..., 0 /*share*/, ..., OPEN_EXISTING ,...)))
    2.     Sleep(1); //для скорости
    Ведь файл большим может оказаться, и ты окажешься в этом месте ещё в момент записи (т.е. файл уже создан, но не записан до конца).
     
  6. Guest

    Guest Guest

    Публикаций:
    0
    HoBleen
    Да. Так действительно лучше.

    Меня смутило то что о задержки создания в MSDN ни слова! Блин возращать TRUE когда результата еще нет... это в стиле MS. Еще бы так с левым пасом пропускали....