Функция MoveFileWithProgress перемещает файл или каталог. MoveFileWithProgress дает возможность предоставить функцию повторного вызова, которая получает уведомления о продвижении процесса.
Синтаксис
BOOL MoveFileWithProgress( LPCTSTR lpExistingFileName, // имя файла LPCTSTR lpNewFileName, // новое имя файла LPPROGRESS_ROUTINE lpProgressRoutine, // функ. повторного вызова LPVOID lpData, // парам. повторного вызова DWORD dwFlags // параметры переноса ); |
Параметры
lpExistingFileName
[in] Указатель на символьную строку с нулем в конце, которая именует существующий файл или каталог на локальной машине.Если dwFlags определяет MOVEFILE_DELAY_UNTIL_REBOOT, файл не может существовать при удаленном совместном использовании, потому что отложенные операции выполняются прежде, чем становится доступна сеть.
Windows NT/2000/XP: .В версии ANSI этой функции, имя ограничивается символами свойства MAX_PATH. Чтобы выйти за пределы этого ограничения до длины 32 767 символов, вызовите Unicode версию этой функции и присоедините спереди пути "\\?\". Подробную информацию см. в статье Именование файлов.
Windows 95/98/Me: Эта символьная строка не должна выходить за пределы числа символов установленных MAX_PATH.
lpNewFileName
[in] Указатель на символьную строку с нулем в конце, содержащую новое имя файла или каталога локального компьютера.При перемещении файла, параметр lpNewFileName может быть в другой файловой системе или в другом томе. Если lpNewFileName является другим диском, в параметре dwFlags вы должны установить флажок MOVEFILE_COPY_ALLOWED.
При перемещении каталога, lpExistingFileName и lpNewFileName должны быть одним и тем же диском.
Если параметр dwFlags установлен в MOVEFILE_DELAY_UNTIL_REBOOT, а параметр lpNewFileName имеет значение ПУСТО (NULL), функция MoveFileWithProgress регистрирует файл в параметре lpExistingFileName для удаления, когда система перезагружается. Функция завершается ошибкой, если она не может обратиться к системному реестру, чтобы сохранить информацию об удаляющей операции. Если параметр lpExistingFileName относится к каталогу, система удаляет при перезагрузке каталог, только в том случае, если каталог пуст.
lpProgressRoutine
[in] Указатель на функцию повторного вызова CopyProgressRoutine, которая вызывается каждый раз, когда еще одна часть файла была перемещена. Функция повторного вызова может быть полезна тогда, если Вы предоставляете пользовательский интерфейс, который показывает на экране продвижение рабочего процесса. Этот параметр может быть - ПУСТО (NULL).lpData
[in] Параметр, который передается в функцию повторного вызова CopyProgressRoutine. Этот параметр может быть ПУСТО (NULL).dwFlags
[in] Опции перемещения. Этот параметр может состоять из одного или нескольких нижеследующих значений.Значение | Предназначение |
---|---|
MOVEFILE_COPY_ALLOWED | Если файл
должен переместиться в другой том,
функция имитирует перемещение,
используя функции
CopyFile
и DeleteFile. Это значение не может использоваться с флажком MOVEFILE_DELAY_UNTIL_REBOOT. |
MOVEFILE_CREATE_HARDLINK | Зарезервировано для будущего использования. |
MOVEFILE_DELAY_UNTIL_REBOOT | Система не
перемещает файл до тех пор, пока
операционная система не
перезапустится. Система перемещает
файл немедленно после того, как
исполнено AUTOCHK, но
перед созданием любого файла
подкачки . Следовательно, этот
параметр включает в работу функцию,
которая удаляет файл подкачки из
предыдущих запусков. Это значение может использоваться только в том случае, если процесс находится в контексте пользователя, который принадлежит группе администратора или учетной записи LocalSystem. Это значение не может использоваться с флажком MOVEFILE_COPY_ALLOWED. |
MOVEFILE_FAIL_IF_NOT_TRACKABLE | Функция завершается ошибкой, если исходный файл является источником ссылки, но файл не может быть отслежен после перемещение. Эта ситуация может произойти тогда, когда место назначения является томом, отформатированным файловой системой FAT. |
MOVEFILE_REPLACE_EXISTING | Если файл,
названный параметром lpNewFileName
существует, функция заменяет его
содержание содержанием файла в
параметре lpExistingFileName. Это значение не может использоваться, если lpNewFileName или lpExistingFileName именуют каталог. |
MOVEFILE_WRITE_THROUGH | Функция не
возвращает значения до тех пор, пока
файл не будет действительно
перемещен на диск. Настройки этого значения гарантирует то, что перемещение, выполненное как операция копирования и удаления сбрасывается на диск, до того как функция возвращает значение. Сброс происходит в конце операции копирования. Это значение не действует, если установлен флажок MOVEFILE_DELAY_UNTIL_REBOOT. |
Возвращаемое значение
Если функция завершается успешно, возвращаемое значение - не нуль.
Если функция завершается ошибкой, величина возвращаемого значения - нуль. Чтобы получить дополнительные данные об ошибке, вызовите GetLastError.
При перемещении файла между томами, если lpProgressRoutine возвращает PROGRESS_CANCEL вследствие отмены пользователем операции, MoveFileWithProgress должна возвратить нуль, а GetLastError возвратить ERROR_REQUEST_ABORTED. Существующий файл остается нетронутым.
При перемещении файла между томами, если lpProgressRoutine возвращает значение PROGRESS_STOP вследствие того, что пользователь остановил операцию, MoveFileWithProgress должна возвратить нуль, а GetLastError возвратит значение ERROR_REQUEST_ABORTED. Существующий файл остается нетронутым.
Замечания
Функция MoveFileWithProgress координирует свое действие с модулем обслуживания отслеживания ссылок, так что источники ссылок могут быть отслежены, как они перемещались.
Чтобы удалить или переименовать файл, Вы должны иметь, или разрешение на удаление файла, или разрешение на удаление потомка в родительском каталоге. Если Вы устанавливаете каталог с полным доступом, кроме удаления его и удаления его дочерних элементов, а списки контроля доступа (ACL) новых файлов унаследованы, то вам следует получить возможность создать файл, без возможности удалить его. Однако, Вы можете затем создать файл и получить весь доступ, который Вы запрашиваете на дескрипторе, возвращенном Вам, когда Вы создаете файл. Если Вы затребовали разрешение на удаление, во время создания файла, Вы можете удалить или переименовать файл с этим дескриптором, но не с каким-либо другим.
Чтобы откомпилировать приложение, которое использует эту функцию, определите макрос _WIN32_WINNT как 0x0500 или позже. Для получения дополнительной информации, см. Использование заголовочных файлов SDK.
Смотри также
Обзор Управление файлами, Функции, используемые в управлении файлами, CopyFileEx, CopyProgressRoutine, MoveFileEx
Размещение и совместимость MoveFileWithProgress |
||
К |
Windows XP |
Да |
л |
Windows 2000 Professional |
Да |
и |
Windows NT |
Нет |
е |
Windows Me |
Нет |
н |
Windows 98 |
Нет |
т |
Windows 95 |
Нет |
С |
Windows Server 2003 |
Да |
е | Windows 2000 Server | Да |
р | Windows NT Server | Нет |
в | ||
е | ||
р | ||
Используемая библиотека |
Kernel32.lib |
|
Используемая DLL | - | |
Заголовочный файл | ||
- объявлено в |
Winbase.h |
|
- включено в |
Windows.h |
|
Unicode |
Реализуется как версии Unicode и ANSI. |
|
Замечания по платформе |
Не имеется |