rename():尽管完全控制,但访问被拒绝

rename(): Access Denied despite full control

本文关键字:控制 访问 拒绝 rename      更新时间:2023-10-16

这个问题乍一看很可笑。我正在用C++编写一个简单的应用程序。我编译了代码。一切都很顺利,直到我把exe移到了与系统不同的分区。我有两个分区(C:带系统和E:带数据,它们都是NTFS),来自C:,例如来自Desktop,来自C:\的根目录,程序没有任何问题。从E:\,rename()函数抛出一个错误"Access Denied"。

澄清:
-我拥有完整的管理权限
-该程序以管理权限运行
-任何进程都不会使用传输的文件
-安全策略中作为E:\的系统分区已授予管理员组和我个人的完全权限。

如何解决
例如:即使没有管理员权限,可以将文件保存在同一个地方的游戏也没有问题。

当我尝试使用MoveFileEx时,出现了代码5的错误。代码5表示"拒绝访问"。也因为它是另一个分区

根据注释,您的原始名称和新名称不在同一个分区/驱动器/装载点上。rename只更改名称,它实际上不是一个"移动"命令(只是当源和dest位于同一文件系统上时,它恰好可用)。

如果您需要跨分区移动,在Windows上,您可以使用MoveFile功能,如果可能的话,它将是rename,或者当目标位于不同的分区时,它将"复制并删除原始文件"。

如果您需要踩踏现有文件(MoveFile拒绝覆盖现有文件),请使用带有标志MOVEFILE_COPY_ALLOWED | MOVEFILE_REPLACE_EXISTINGMoveFileEx(在MOVEFILE_WRITE_THROUGH中可以选择or,这样当原子rename不可能时,操作将一直阻止,直到文件完成移动)。