gpt4 book ai didi

c++ - 为什么 CreateFile 无法通过网络共享打开文件?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:33:05 25 4
gpt4 key购买 nike

我编写了一个经常打开小型用户文本文件的小程序,直到现在还没有遇到任何读/写访问问题或任何类型的冲突。这些文件是在我无法控制的另一个软件中选择的,并作为字符串传递给我。

尝试从映射的网络驱动器打开文件时,出现“系统找不到指定的路径”错误 (GetLastError() = 3)。

调用如下所示,*iNCfileName = "z:\\Validation\\Sample Files\\1_1-4 120MM.CC",其中 Z: 是我们域中的映射文件夹。

iNCfile = CreateFile( iNCfileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL);
if ( iNCfile == INVALID_HANDLE_VALUE )
{
string msg; // lots of better ways to get this printed ... but ...
dw = GetLastError();
msg = iNCfileName;
msg += ": ";
msg += _com_error(dw).ErrorMessage();
print_error(dw , (char*)msg.c_str() );
return 102;
}

如果我将文件复制到本地硬盘驱动器,该文件会从我的程序中打开。它还会从映射的驱动器在记事本中打开。

这可能是“Z:\whatever.txt”映射表示和真实文件名 (\mydomain\Validation\S....??) 之间的问题吗?

如果是这样,我如何以编程方式从一个转换为另一个(假设我不会提前知道域名/共享名称)?

如果有任何不同,我使用 VS2010 并且应用程序在 Win XP 机器上执行。

相关:my follow up question

最佳答案

我以前遇到过这种情况。当使用像 \\DOMAIN\PATH\FILE.TXT 这样的路径时,我必须首先调用 WNetAddConnection2()

这是我的代码(当然你可以排除NULL成员):

NETRESOURCE nr = {0}; //new structure for network resource
nr.dwType = RESOURCETYPE_ANY; //generic resource (any type allowed)
nr.lpLocalName = NULL; //does not use a device
nr.lpRemoteName = "\\\\DOMAIN\\PATH\\FOLDER"; //For me, this pointed to an account's documents folder, and from there I could use a subfolder
nr.lpProvider = NULL; //no provider

DWORD ret = WNetAddConnection2 (&nr, NULL, NULL, CONNECT_TEMPORARY); //add connection

不要忘记 header 和库。

关于c++ - 为什么 CreateFile 无法通过网络共享打开文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9587756/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com