MoveFileEx

【勇芳软件工作室】汉化HomePreviousNext

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 
 如果要将文件移动到不同的卷,该函数将使用CopyFileDeleteFile函数来模拟移动。不能与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