打开文件进行读取时遇到新的 Windows 10 错误代码CreateFile()
。我们得到错误395,但关于其含义或如何解决的信息很少。 Windows 10 SDK的错误详细信息如下
- 错误编号395
- 误差常数
ERROR_CLOUD_FILE_ACCESS_DENIED
- 操作系统错误消息“访问
云文件被拒绝。”
有问题的机器是 Windows 10 专业版。它正在运行 OneDrive,但该文件不在 OneDrive 文件夹下。我们怀疑 OneDrive 可能正在使用它已知文件夹移动 https://learn.microsoft.com/en-us/onedrive/plan-onedrive-enterprise#known-folder-move特征
用于打开该文件的代码是:
HANDLE hnd = ::CreateFile(fname,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_SEQUENTIAL_SCAN,
NULL);
if (hnd == INVALID_HANDLE_VALUE) {
DWORD exitcode = ::GetLastError();
printf("%d\n", exitcode);
}
如果有人遇到过这个问题,我们将不胜感激您能分享的任何见解。
经过仔细研究,我们发现这是由一个简单的权限问题引起的。用户进程执行CreateFile()
呼叫无权访问存储在云中的文件。 OneDrive 的Known File Move
我们没有意识到它导致文件夹存储在云中。
一旦我们意识到这是云权限问题,修复云权限以允许用户进程打开文件就变得很简单。
在我们的特殊情况下,我们安排运行我们的流程行政人员,这使得我们能够调用CreateFile()
成功。如果您尝试访问存储在其他用户拥有的 OneDrive 共享中的文件,则您将无法使用此解决方案。您需要请求文件所有者授予您所请求的访问权限。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)