c++ - 重命名(): Access Denied despite full control

标签 c++ rename

这个问题乍一看很可笑。我正在用 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/

相关文章:

c++ - ReactNative 公开 C++ 本地模块

python - 为多个文件添加扩展名(Python3.5)

c - 如何仅使用 C 列出和操作 Windows 文件?

python - 如果单元格的值为 1,则将数据集中的 0-1 值与列名转换

C++ 类继承顺序

c++ - 给出错误答案的简单 C++ 代码

windows - 批处理文件复制不起作用,告诉我找不到指定的文件

git - 在 Git 中,如何获取从一个修订版到另一个修订版的文件更改的详细列表?

c++ - 如何在另一个文件的类中声明一个函数

c++ - 动态分配 3d 数组