繁体   English   中英

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

[英]Can't open network drive (smb / samba) programatically with C# and .NET 4.8

我在以编程方式打开网络驱动器时遇到问题。 我使用了此处描述的方式: 从 C# 访问远程目录 这是许多其他 Stackoverflow 帖子和其他站点上建议的解决方案。 而且我还没有看到任何其他方法来做到这一点。

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

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

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

    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的工作原理,请使用上面的链接。

在文件资源管理器中建立与共享的连接后工作的代码(但不是之前):

    ...
    string filename = Path.Combine(SambaSharePath, imagePath);
    var stream = new FileStream(filename, FileMode.Open);
    ...

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

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

有没有人知道如何让代码工作以及错误的原因是什么?

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

使用这篇文章解决了这个问题: 为什么这些 DLL 有两个明显相同的入口点?

我不得不改变原来的解决方案

    [DllImport("mpr.dll")]
    private static extern int WNetAddConnection2(NetResource netResource, 
                                                 string password, 
                                                 string username, 
                                                 int flags);

必须修改为:

    [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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM