我已经编写了一个示例应用程序来从另一个文件中读取该文件。当我从虚拟机运行此应用程序时,访问被拒绝。下面是代码。
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;
}如果有什么变化,请告诉我。
发布于 2011-08-25 23:49:11
错误代码5代表“访问被拒绝”。您应该检查用户的访问权限。
发布于 2011-08-26 00:03:33
CreateFileW()的错误输出为INVALID_HANDLE_VALUE,而不是NULL。现在,对于文件句柄来说,NULL听起来肯定是一个错误的值,但仍然如此。
粘贴的代码片段到底是你程序的内容,还是复述?
编辑:我发现这里涉及到一个虚拟机。您可以在记事本中从程序运行和出错的虚拟机中打开文件吗
发布于 2011-08-26 00:32:33
我相信the documentation for CreateFile掌握着答案。
可能是您的dwShareMode导致了问题。在那里使用FILE_SHARE_READ表示“允许其他打开程序以读访问方式打开文件”。如果您不指定FILE_SHARE_WRITE`,则其他打开程序将无法打开该文件以进行写入-您的调用将阻止这种情况。
但是,我相信,当阴影会被先前的打开程序破坏时,CreateFile也会失败。如果这是真的,那么如果另一个应用程序已经打开了该文件以进行写访问,那么如果您指定dwShareMode = FILE_SHARE_READ,则对CreateFile的调用将失败。你看到了吗?您可能需要为该dwShareMode参数指定FILE_SHARE_WRITE | FILE_SHARE_READ。
试试看。
https://stackoverflow.com/questions/7193348
复制相似问题