Windows下复制文件/目录时保留日期与属性的技术问题咨询
复制文件与目录时的属性保留及权限处理疑问
- 我希望复制文件和目录时保留所有属性,因此使用了
CopyFileEx和CreateDirectoryEx,但这两个API无法保留文件时间,所以需要获取文件句柄并调用SetFileTime来实现。 - 针对
CopyFileEx:它会通过回调传递目标文件句柄,我可以在此处调用SetFileTime,但官方文档未明确说明该回调是否一定会被触发。我更倾向于在复制完成后设置文件时间,但回调无法指示是否为最后一次调用,因此只能在首次回调时设置。不过我担心,如果CopyFileEx后续写入更多数据,最后写入时间会不会被覆盖?(目前在小文件测试中,三个文件时间均能被保留。) - 针对
CreateDirectoryEx:它完全不提供对目标目录句柄的访问权限。虽然我可以在调用该API后立即打开目标目录,但这种做法存在竞争条件,而且CreateDirectoryEx本身已经打开了该句柄,重复操作显得多余。 - 另外还有权限问题:当目标对象已存在且为只读属性时,
CopyFileEx/MoveFileEx/DeleteFile/RemoveDirectory都会因访问被拒绝而失败。但如果先调用SetFileAttributes移除只读属性再重试,又会存在竞争条件。
内容的提问来源于stack exchange,提问作者mbolp
相关产品推荐
相关产品推荐

