首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法用C#和.NET 4.8编程打开网络驱动器(smb / samba)

无法用C#和.NET 4.8编程打开网络驱动器(smb / samba)
EN

Stack Overflow用户
提问于 2022-10-03 09:01:38
回答 1查看 146关注 0票数 0

我在以编程方式打开网络驱动器时遇到了问题。我使用了这里描述的方式:Access a Remote Directory from C#。这是提议的解决方案,在许多其他的堆栈溢出职位和其他网站。我也没见过其他的方法。

提出的解决方案提供了一个例外:系统错误67“找不到网络名称”。

问题是,网络名称是正确的,可以找到。如果我首先在windows文件资源管理器中输入相同的网络名称、用户名和密码,就可以从代码中访问这些文件。

我想按照建议的解决方案编写代码,该解决方案不起作用:

代码语言:javascript
运行
复制
    var SambaSharePath = @"\\images.eksempel.dk\archive\public";
    var SambaUsername = @"net\username";    
    var SambaPassword = ConfigurationManager.AppSettings["SambaPassword"];
    networkCredential = new NetworkCredential(SambaUsername, SambaPassword);    
    string filename = Path.Combine(SambaSharePath, imagePath);
    MemoryStream image = new MemoryStream();
        using (var x = new NetworkConnection(SambaSharePath, networkCredential))
        {
           var stream = new FileStream(filename, FileMode.Open);
           filename = Path.GetFileName(filename);
           stream.CopyTo(image);
           stream.Close();
        }
    return image; 

要查看NetworkConnection是如何工作的,请使用上面的链接。

在建立到共享的连接之后,在文件资源管理器中建立的代码(但不在此之前):

代码语言:javascript
运行
复制
    ...
    string filename = Path.Combine(SambaSharePath, imagePath);
    var stream = new FileStream(filename, FileMode.Open);
    ...

我尝试过对共享名和用户名进行正反斜杠等的任何可能组合,以使代码工作,但没有任何帮助。所以我排除了拼写错误和格式错误。

我尝试过谷歌的例外,但没有一个解释在上下文中给出了意义。

有人知道如何使代码正常工作吗?导致错误的原因是什么?

解决办法是首先与文件资源管理器建立连接,但在服务器重新启动时不会自动工作。

EN

回答 1

Stack Overflow用户

发布于 2022-10-03 11:00:29

使用以下文章:Why do these DLLs have two apparently identical entry points?解决了这个问题

我不得不在original solution上做一个改变。

代码语言:javascript
运行
复制
    [DllImport("mpr.dll")]
    private static extern int WNetAddConnection2(NetResource netResource, 
                                                 string password, 
                                                 string username, 
                                                 int flags);

必须修改为:

代码语言:javascript
运行
复制
    [DllImport("mpr.dll", EntryPoint = "WNetAddConnection2", SetLastError = true, CharSet = CharSet.Auto)]
        private static extern int WNetAddConnection2(NetResource netResource,
            string password, string username, int flags);

它是如何处理路径名和用户名字符串的。如ANSI或Unicode。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73933213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档