MoveFileEx函数重命名现有的文件或目录。
BOOL MoveFileEx(
LPCTSTR 【lpExistingFileName】, | //现有文件的名称地址 |
LPCTSTR 【lpNewFileName】, | //文件的新名称地址 |
DWORD 【dwFlags中】 | //标志来确定如何移动文件 |
); |
参数
【lpExistingFileName】
指向以空字符结尾的字符串,命名现有文件或目录。
【lpNewFileName】
指向一个以null结尾的字符串,指定新名称【lpExistingFileName】.
移动文件时,目的地可以在不同的文件系统或驱动器上。如果目的地在另一个驱动器上,则必须在【dwFlags中】中设置MOVEFILE_COPY_ALLOWED标志。
移动目录时,目的地必须在同一个驱动器上。
Windows NT:
如果【dwFlags中】指定MOVEFILE_DELAY_UNTIL_REBOOT,则【lpNewFileName】可以为NULL。在这种情况下,MoveFileEx注册在系统重新启动时要删除的【lpExistingFileName】文件。
【dwFlags中】
一组指定如何移动文件的位标志。您可以指定以下值的任意组合:
值 | 含义 | ||||
MOVEFILE_COPY_ALLOWED | |||||
如果要将文件移动到不同的卷,该函数将使用CopyFile和DeleteFile函数来模拟移动。不能与MOVEFILE_DELAY_UNTIL_REBOOT标志组合。 | |||||
MOVEFILE_DELAY_UNTIL_REBOOT | |||||
仅Windows NT:在重新启动操作系统之前,该函数不会移动该文件。AUTOCHK执行后,系统会立即移动文件,但在创建任何页面文件之前。因此,该参数使该函数能够删除先前启动的分页文件。 | |||||
MOVEFILE_REPLACE_EXISTING | |||||
如果【lpNewFileName】指定的名称的文件已经存在,则该函数将其内容替换为【lpExistingFileName】指定的内容。 | |||||
MOVEFILE_WRITE_THROUGH | |||||
仅Windows NT:在磁盘上实际移动文件之前,该函数不会返回。 设置此标志保证在函数返回之前,将作为复制和删除操作执行的移动刷新到磁盘。冲洗在复制操作结束时发生。 如果设置了MOVEFILE_DELAY_UNTIL_REBOOT标志,则此标志无效。 |
返回值
如果函数成功,返回值不为零。
如果函数失败,返回值为零。要获取扩展错误信息,请调用GetLastError.
备注
应用程式不能为【dwFlags中】指定MOVEFILE_DELAY_UNTIL_REBOOT和MOVEFILE_COPY_ALLOWED。这样做的函数调用将失败。
Windows NT:
如果【dwFlags中】参数指定MOVEFILE_DELAY_UNTIL_REBOOT,则MoveFileEx将在以下注册表项下重新启动时存储要重命名的文件的位置:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\
控制\\\\会话管理器\\\\ PendingFileRenameOperations
键的类型为REG_MULTI_SZ。每个重命名操作都是一对以NULL结尾的字符串。系统使用这些注册表项在重新启动时按照它们发出的顺序完成操作。
例如,在Windows NT上,以下代码片段创建注册表项,在重新启动时删除【szDstFile】并重命名为【szDstFile】:
MoveFileEx(szDstFile, NULL, MOVEFILE_DELAY_UNTIL_REBOOT);
MoveFileEx(szSrcFile, szDstFile, MOVEFILE_DELAY_UNTIL_REBOOT);
系统将按如下所示创建关联的PendingFileRenameOperations条目:
szDstFile\0\0
szSrcFile\0szDstFile\0\0
Windows 95:
不支持MOVEFILE_DELAY_UNTIL_REBOOT标志。要在Windows 95系统上重新启动时重命名或删除文件,请在Windows目录的WININIT.INI文件中放入一个条目。
例如,在Windows 95上,以下代码段创建WININIT.INI条目,在重新启动时删除【szDstFile】并重命名【szDstFile】为【szDstFile】
GetWindowsDirectory(szWinInitFile, uSize);
lstrcat(szWinInitFile, "\\WININIT.INI");
WritePrivateProfileString("Rename", "NUL", szDstFile, szWinInitFile);
WritePrivateProfileString(“Rename”,szDstFile,szSrcFile,szWinInitFile);
也可以看看
CopyFile, DeleteFile, GetWindowsDirectory, lstrcat, MoveFile, WritePrivateProfileString