Функция MoveFileEx перемещает существующий файл или каталог.
Функция MoveFileWithProgress эквивалентна функции MoveFileEx, за исключением того, что MoveFileWithProgress дает возможность предоставить функцию повторного вызова, которая получает уведомления о ходе выполнения.
Синтаксис
BOOL MoveFileEx( LPCTSTR lpExistingFileName, // имя файла LPCTSTR lpNewFileName, // имя нового файла DWORD dwFlags // параметры перемещения ); |
Параметры
lpExistingFileName
[in] Указатель на символьную строку с нулем в конце, которая именует существующий файл или каталог на локальном компьютере.Если dwFlags устанавливает MOVEFILE_DELAY_UNTIL_REBOOT, то файл не может существовать при удаленном совместном использовании, потому что отложенные операции выполняются прежде, чем сеть будет доступна.
В версии ANSI этой функции, имя ограничивается числом символов флажка MAX_PATH. Чтобы выйти за пределы этого ограничения, до длины 32 767 символов, вызовите Unicode версию этой функции и присоедините спереди пути "\\?\". Подробную информацию см. в статье Именование файлов.
Windows 2000: Если вы присоединяйте спереди имени файла "\\?\", вы не можете также определить и флажок MOVEFILE_DELAY_UNTIL_REBOOT для параметра dwFlags.
lpNewFileName
[in] Указатель на символьную строку с нулем в конце, которая задает новое название lpExistingFileName на локальной машине.При перемещении файла, место назначения может быть другой файловой системой или томом. Если приемник является другим диском, Вы в параметре dwFlags должны установить флажок MOVEFILE_COPY_ALLOWED.
При перемещении каталога, место назначения должно быть тем же самым диском.
Если параметр dwFlags устанавливает MOVEFILE_DELAY_UNTIL_REBOOT, параметр lpNewFileName - ПУСТО (NULL), функция MoveFileEx регистрирует файл параметра lpExistingFileName для удаления, когда система перезагружается. Если параметр lpExistingFileName относится к каталогу, система удаляет при перезагрузке каталог, только в том случае, если каталог пуст.
dwFlags
[in] Этот параметр может состоять из одного или нескольких нижеследующих значений.Значение | Преднаначение |
---|---|
MOVEFILE_COPY_ALLOWED | Если файл
должен переместиться в другой том,
функция имитирует перемещение,
используя функции
CopyFile
и DeleteFile. Это значение не может использоваться с флажком MOVEFILE_DELAY_UNTIL_REBOOT. |
MOVEFILE_CREATE_HARDLINK | Зарезервированный для будущего использования. |
MOVEFILE_DELAY_UNTIL_REBOOT | Система не
перемещает файл до тех пор, пока
операционная система не
перезапустится. Система перемещает
файл, немедленно после того, как
исполнено AUTOCHK, но
перед созданием любого файла
подкачки . Следовательно, этот
параметр включает в работу функцию,
которая удаляет файл подкачки из
предыдущих запусков. Это значение может использоваться только в том случае, если процесс находится в контексте пользователя, который принадлежит группе администратора или учетной записи LocalSystem. Это значение не может использоваться с флажком MOVEFILE_COPY_ALLOWED. Windows 2000: Если вы определили флажок MOVEFILE_DELAY_UNTIL_REBOOT для параметра dwFlags, то вы не можете также и присоединить спереди имени файла "\\?\", определяемый параметром lpExistingFileName. |
MOVEFILE_FAIL_IF_NOT_TRACKABLE | Windows 2000/XP:
Функция завершается ошибкой, если
исходный файл является источником
ссылки, но файл не может быть
отслежен после перемещения. Эта
ситуация может произойти тогда,
когда место назначения является
томом, отформатированным файловой
системой FAT.
Windows NT: Это значение не поддерживается. |
MOVEFILE_REPLACE_EXISTING | Если файл,
именованный параметром lpNewFileName
существует, функция заменяет его
содержание содержанием файла в
параметре lpExistingFileName. Это значение не может использоваться, если lpNewFileName или lpExistingFileName именуют каталог. |
MOVEFILE_WRITE_THROUGH | Функция не
возвращает значения до тех пор, пока
файл не будет действительно
перемещен на диск. Настройки этого значения гарантирует, что перемещение, выполненное как копирование и операция удаления сбрасывается на диск, до того как функция возвращает значение. Сброс происходит в конце операции копирования. Это значение не действует, если установлен флажок MOVEFILE_DELAY_UNTIL_REBOOT. |
Возвращаемые значения
Если функция завершается успешно, возвращаемое значение - не нуль.
Если функция завершается ошибкой, величина возвращаемого значения - нуль. Чтобы получить дополнительные сведения об ошибке, вызовите GetLastError.
Замечания
Если параметр dwFlags устанавливает флажок MOVEFILE_DELAY_UNTIL_REBOOT, MoveFileEx завершается ошибкой, если она не может получить доступ к реестру. Функция MoveFileEx сохраняет места файлов, которые переименуются при перезагрузке, в следующее ниже реестровое значение:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations |
Функция завершается ошибкой, если она не может обратиться к системному реестру.
Это значение реестра имеет тип REG_MULTI_SZ. Каждая операция переименования сохраняет следующую пару символьных строк с нулем в конце.
szDstFile\0\0 szSrcFile\0szDstFile\0\0 |
Система использует эти записи системного реестра, чтобы завершать операции при перезагрузке в том же самом порядке, в котором они были созданы. Например, нижеследующий кодовый фрагмент создает записи системного реестра, которые удаляют szDstFile и переименовывают szSrcFile, чтобы при перезагрузке быть szDstFile :
MoveFileEx(szDstFile, NULL, MOVEFILE_DELAY_UNTIL_REBOOT); MoveFileEx(szSrcFile, szDstFile, MOVEFILE_DELAY_UNTIL_REBOOT); |
Поскольку фактическое перемещение и операции удаления, заданные с флажком MOVEFILE_DELAY_UNTIL_REBOOT происходит после того, как вызывающая программа прекратила выполняться, то возвращаемое значение не может отразить успех или неудачу в перемещении или удалении файла. Скорее, оно отражает успех или неудачу в размещении соответствующих записей в системный реестр.
Система удаляет каталог, отмеченный для удаления флажком MOVEFILE_DELAY_UNTIL_REBOOT, только в том случае, если он пустой. Чтобы гарантировать удаление каталогов, переместите или удалите все файлы из каталога до того как попытаетесь его удалить. Файлы могут находиться в каталоге в период загрузки, но они должны быть удалены или перемещены, до того как систем, может удалить этот каталог.
Операции перемещения и удаления выполняются в момент загрузки в одном и том же порядке, в котором они определены в вызывающей программе. Чтобы удалить каталог, который имеет файлы в этот в период загрузки, сначала удалите эти файлы.
Если файл перемещается, из тома в том, MoveFileEx не перемещают дескриптор безопасности с файлом. Файлу должен быть назначен заданный по умолчанию дескриптор безопасности в принимающем каталоге.
Windows 2000/XP: Функция MoveFileEx координирует свою операцию со службой отслеживания связей, так что источники ссылок, когда они перемещаются, могут быть отслежены.
Windows 95/98/Me: Функция MoveFileEx не поддерживается. Чтобы переименовать или удалить файл при перезагрузке, используйте нижеследующую процедуру.
Чтобы переименовать или удалить файлы в Windows 95/98/Me
DestinationFileName=SourceFileName |
И параметр DestinationFileName и параметр SourceFileName должны иметь короткие имена файла. Чтобы удалить файл, используйте NULL (ПУСТО) как значение для DestinationFileName.
Система обрабатывает WININIT.INI в течение системной начальной загрузки. После того как файл WININIT.INI будет обработан, система называет его WININIT.BAK.
Чтобы удалить или переименовать файл, Вы должны иметь или разрешение на удаление файла, или разрешение на удаление потомка в родительском каталоге. Если Вы устанавливаете каталог с полным доступом кроме удаления его и удаления его дочерних элементов, а списки контроля доступа (ACL) новых файлов унаследованы, то вам следует получить возможность создать файл, без возможности удалить его. Однако, Вы можете затем создать файл и получить весь доступ, который Вы запрашиваете на дескрипторе, возвращенном Вам, когда Вы создаете файл. Если Вы затребовали разрешение на удаление, во время создания файла, Вы можете удалить или переименовать файл с этим дескриптором, но не с каким-либо другим.
Код примера
Пример смотри в статье Создание и использование временных файлов.
Смотри также
Обзор Управление файлами, Функции, используемые в управлении файлами, CopyFile, DeleteFile, GetWindowsDirectory , MoveFileWithProgress, WritePrivateProfileString
Размещение и совместимость MoveFileEx |
||
К |
Windows XP |
Да |
л |
Windows 2000 Professional |
Да |
и |
Windows NT Workstation |
Да |
е |
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 для Windows 2000/XP. |
|
Замечания по платформе |
Не имеется |