replaceFileA 函数 (winbase.h)
将一个文件替换为另一个文件,并可以选择创建原始文件的备份副本。 替换文件采用被替换文件的名称及其标识。
语法
BOOL ReplaceFileA(
[in] LPCSTR lpReplacedFileName,
[in] LPCSTR lpReplacementFileName,
[in, optional] LPCSTR lpBackupFileName,
[in] DWORD dwReplaceFlags,
LPVOID lpExclude,
LPVOID lpReserved
);
参数
[in] lpReplacedFileName
要替换的文件的名称。
默认情况下,名称限制为MAX_PATH个字符。 若要将此限制扩展到 32,767 个宽字符,请在路径前面添加“\\?\”。 有关详细信息,请参阅命名文件、路径和命名空间。
提示
从 Windows 10 版本 1607 开始,可以选择删除MAX_PATH限制,而无需在前面添加“\\?\”。 有关详细信息,请参阅 命名文件、路径和命名空间 的“最大路径长度限制”部分。
使用 GENERIC_READ、 DELETE 和 SYNCHRONIZE 访问权限打开此文件。 共享模式FILE_SHARE_READ FILE_SHARE_WRITE | | FILE_SHARE_DELETE。
调用方必须对要替换的文件具有写入访问权限。 有关详细信息,请参阅 文件安全和访问权限。
[in] lpReplacementFileName
将替换 lpReplacedFileName 文件的文件的名称。
默认情况下,名称限制为MAX_PATH个字符。 若要将此限制扩展到 32,767 个宽字符,请在路径前面添加“\\?\”。 有关详细信息,请参阅命名文件、路径和命名空间。
提示
从 Windows 10 版本 1607 开始,可以选择删除MAX_PATH限制,而无需在前面添加“\\?\”。 有关详细信息,请参阅 命名文件、路径和命名空间 的“最大路径长度限制”部分。
函数尝试使用 SYNCHRONIZE、GENERIC_READ、GENERIC_WRITE、DELETE 和 WRITE_DAC 访问权限打开此文件,以便可以保留所有属性和 ACL。 如果此操作失败,函数将尝试使用 SYNCHRONIZE、 GENERIC_READ、 DELETE 和 WRITE_DAC 访问权限打开文件。 未指定共享模式。
[in, optional] lpBackupFileName
将用作 lpReplacedFileName 文件的备份副本的文件的名称。 如果此参数为 NULL,则不创建备份文件。 有关备份文件的实现详细信息,请参阅“备注”部分。
默认情况下,名称限制为MAX_PATH个字符。 若要将此限制扩展到 32,767 个宽字符,请在路径前面添加“\\?\”。 有关详细信息,请参阅命名文件、路径和命名空间。
提示
从 Windows 10 版本 1607 开始,可以选择删除MAX_PATH限制,而无需在前面添加“\\?\”。 有关详细信息,请参阅 命名文件、路径和命名空间 的“最大路径长度限制”部分。
[in] dwReplaceFlags
替换选项。 此参数可使用以下一个或多个值。
lpExclude
留待将来使用。
lpReserved
留待将来使用。
返回值
如果该函数成功,则返回值为非零值。
如果函数失败,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。 下面是此函数的可能错误代码。
返回代码/值 | 说明 |
---|---|
|
无法重命名替换文件。 如果指定了 lpBackupFileName ,则替换文件和替换文件将保留其原始文件名。 否则,替换的文件将不再存在,并且替换文件以其原始名称存在。 |
|
无法移动替换文件。 替换文件仍以原始名称存在;但是,它已从要替换的文件继承了文件流和属性。 要替换的文件仍然存在,其名称不同。 如果指定 了 lpBackupFileName ,它将是替换文件的名称。 |
|
无法删除替换的文件。 替换文件和替换文件保留其原始文件名。 |
如果返回任何其他错误(例如 ERROR_INVALID_PARAMETER),替换文件和替换文件将保留其原始文件名。 在这种情况下,备份文件不存在,并且不能保证替换文件继承已替换文件的所有属性和流。
备注
- 创建时间
- 短文件名
- 对象标识符
- DACL
- 安全资源属性
- Encryption
- 压缩
- 已命名流不在替换文件中
Windows 7、Windows Server 2008 R2、Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP: 在Windows 8和Windows Server 2012之前,不会保留原始文件的安全资源属性 ( ATTRIBUTE_SECURITY_INFORMATION) 。
如果使用 选择性擦除保护替换文件,则替换的文件将受到替换文件的企业 ID 的保护。
备份文件、替换文件和替换文件必须都位于同一卷上。
若要删除或重命名文件,必须对文件具有删除权限,或者在父目录中删除子权限。 如果设置了除 delete 和 delete 子项之外的所有访问权限的目录,并且新文件的 DACL 继承,则应能够创建文件,而无需删除它。 但是,你可以创建一个文件,并且你将获得在创建文件时返回给你的句柄上请求的所有访问权限。 如果在创建文件时请求删除权限,则可以使用该句柄删除或重命名文件,但不能使用任何其他句柄删除或重命名该文件。
注意
winbase.h 标头将 ReplaceFile 定义为别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将非特定编码别名的使用与非非特定编码的代码混合使用可能会导致不匹配,从而导致编译或运行时错误。 有关详细信息,请参阅 函数原型的约定。
要求
最低受支持的客户端 | Windows XP [桌面应用 |UWP 应用] |
最低受支持的服务器 | Windows Server 2003 [桌面应用 |UWP 应用] |
目标平台 | Windows |
标头 | winbase.h (包括 Windows.h) |
Library | Kernel32.lib |
DLL | Kernel32.dll |