使用 CreateFile()
打开文件进行读取时遇到新的 Windows 10 错误代码。我们收到错误 395,但关于它的含义或如何解决的信息很少。 Windows 10 SDK报错详情如下
- 错误号395
- 错误常量
ERROR_CLOUD_FILE_ACCESS_DENIED
- 操作系统错误消息“访问 云文件被拒绝。”
有问题的机器是 Windows 10 专业版。它正在运行 OneDrive,但文件不在 OneDrive 文件夹下。我们怀疑 OneDrive 可能正在使用它的 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 共享中的文件,则您将无法使用此解决方案。您需要请求文件所有者授予您请求的访问权限。
关于c++ - 有关新 Windows 10 错误 : ERROR_CLOUD_FILE_ACCESS_DENIED 的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55419092/