【发布时间】:2020-07-06 04:37:51
【问题描述】:
我有这样一种按路径读取文件的方法
void test_read_file(std::string const & fileName)
{
std::ifstream file(fileName);
if (!file.is_open())
{
std::cout << "LoadFromFile FAILED to load: " << fileName << std::endl; <--- this line
}
...
}
如果我作为路径 C:\\... 传递,这种方法效果很好,但如果我传递类似 \\\\my_remote_drive\\my_user\\.... 的东西,它就不起作用,我来到我上面标记的行。
好像是权限不足之类的……
我做错了什么?
【问题讨论】:
-
AFAIK
fstream使用本地文件。因此,也许可以尝试使用 sshfs 或 NFS 在本地安装远程磁盘(不确定这在 Windows 上是否可用)。或者也许在诸如 FTP 之类的网络协议之上使用其他东西。 -
也许最简单的方法是将文件下载到临时文件夹然后打开它。
-
std::(i|o)fstream()适用于由有效路径字符串表示的任何文件。它委托底层操作系统实际打开文件。 Windows API 可以打开 UNC 路径,前提是提供到 UNC 共享的有效网络连接。正如 OP 所推测的那样,我必须假设问题与权限有关。直接使用CreateFile()进行验证。如果CreateFile()失败,请使用GetLastError()找出原因 -
@RemyLebeau 我使用 CLI 实现,我发现如果我尝试从 c# 代码读取这个文件是可以的,但是如果我尝试在 c++ 端做同样的事情,它会失败......所以,我认为这不应该是权限问题
-
您需要先为
\\\\my_remote_drive\\IPC$调用NetUseAdd并设置用户名/密码
标签: windows visual-studio winapi visual-c++