这个问题乍一看很可笑。我正在用 C++ 编写一个简单的应用程序。我编译了代码。一切正常,直到我将 exe 移动到与系统不同的分区。我有两个分区(C:带系统,E:带数据,它们都是 NTFS),来自 C:,例如。从桌面,从 C:\等的根目录,程序没有任何问题。从 E:\,rename() 函数抛出错误“拒绝访问”。
澄清:
- 我有完整的管理员权限
- 该程序以管理权限运行
- 传输的文件不被任何进程使用
- 安全策略中的系统分区 E:\已授予 Administrators 组和我个人的全部权限。
如何解决?
例如:可以在同一位置保存文件的游戏即使没有管理员权限也没有问题。
当我尝试使用 MoveFileEx 时,出现代码 5 错误。代码 5 表示“访问被拒绝”。也因为是别的分区
最佳答案
根据评论,您的原始名称和新名称不在同一分区/驱动器/安装点上。 rename
仅更改名称,它实际上并不是一个“移动”命令(当源和目标位于同一文件系统时,它恰好可用)。
如果您需要跨分区移动,在 Windows 上,您可以使用 MoveFile
function如果可能,它将重命名
,或者当目标位于不同的分区时“复制并删除原始文件”。
如果您需要踩踏现有文件(MoveFile
拒绝覆盖现有文件),请使用 MoveFileEx
带有标志 MOVEFILE_COPY_ALLOWED | MOVEFILE_REPLACE_EXISTING
(可选地 或
- 在 MOVEFILE_WRITE_THROUGH
中进行操作,因此当原子 rename
不是时,操作将阻塞直到文件完成移动可能)。
关于c++ - 重命名(): Access Denied despite full control,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33635963/