CreateFile() Failed With GetLastError() = 5
CreateFile() Failed With GetLastError() = 5
我编写了一个示例应用程序来从另一个文件中读取文件。当我运行这个应用程序形式的虚拟机,我得到访问拒绝。代码如下:
int _tmain(int argc, _TCHAR* argv[])
{
WCHAR *wcsPath = L"\\150.160.130.22\share\123.XML";
HANDLE hFile = CreateFileW(wcsPath,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
0,
0);
if (NULL == hFile)
{
printf("failed - %d", GetLastError());
}
return 0;
}
错误码5代表"访问被拒绝"。您应该检查用户的访问权限。
我相信CreateFile的文档中有答案。
它可能是你的dwShareMode引起的问题。使用FILE_SHARE_READ
表示"允许其他打开器打开文件进行READ访问"。如果你没有指定FILE_SHARE_WRITE ',那么其他打开器将无法打开文件进行写入——你的调用将阻止这种情况。
但是,CreateFile,我相信,当sharemode将被先前的打开器违反时,也会失败。如果这是真的,那么如果另一个应用程序已经打开了文件进行写访问,那么如果指定dwShareMode = FILE_SHARE_READ
,那么对CreateFile的调用将失败。你看到了吗?您可能需要为dwShareMode参数指定FILE_SHARE_WRITE | FILE_SHARE_READ
。
试试。
CreateFileW()的错误输出是INVALID_HANDLE_VALUE,而不是NULL。现在,NULL听起来也像一个错误的文件句柄值,但仍然。
粘贴的代码片段是程序的内容,还是重新描述?
编辑:我看到有一个虚拟机。您可以在程序运行的虚拟机中打开记事本中的文件并出错吗?
相关文章:
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 根据 GetLastError 直接写入磁盘会导致错误代码 5
- LLVM 编译:目标的配方 '../lib/IR/Release+Asserts/Intrinsics.gen.tmp' failed
- 流行"Debug Assertion Failed"
- 为什么我的 LogError 函数会重置 GetLastError?
- OpenFileMapping: GetLastError=2
- 提升获取文本的区域设置"Conversion failed"
- dopen():不以 root 身份运行时"failed to map segment from shared object"
- GetLastError()从FtpPutFile()返回错误6
- Qt 错误消息"qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed"
- 使用外部依赖项运行 VC++ 单元测试时"Failed to set up execution context"
- (位图)LoadImage() 返回 NULL,GetLastError() 返回 0
- QListWidget 的 editItem() 输出"edit: editing failed"
- GetLastError 在调用 WinHttpOpenRequest 后返回 6
- 将 GetLastError() 转换为带有错误字符串的异常
- 使用 GetLastError() 的真正正确的方法(时间)是什么?
- WinAPI - GetLastError 在通过 COM ATL DLL 调用时始终返回 0
- 无法将 IOKit 驱动程序与 IOHIDFamily 链接:"dependency load failed"
- ISALPHA 导致 C++ "Debug Assertion Failed"
- CreateFile() Failed With GetLastError() = 5