我在以编程方式打开网络驱动器时遇到了问题。我使用了这里描述的方式:Access a Remote Directory from C#。这是提议的解决方案,在许多其他的堆栈溢出职位和其他网站。我也没见过其他的方法。
提出的解决方案提供了一个例外:系统错误67“找不到网络名称”。
问题是,网络名称是正确的,可以找到。如果我首先在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);
...
我尝试过对共享名和用户名进行正反斜杠等的任何可能组合,以使代码工作,但没有任何帮助。所以我排除了拼写错误和格式错误。
我尝试过谷歌的例外,但没有一个解释在上下文中给出了意义。
有人知道如何使代码正常工作吗?导致错误的原因是什么?
解决办法是首先与文件资源管理器建立连接,但在服务器重新启动时不会自动工作。
发布于 2022-10-03 11:00:29
使用以下文章:Why do these DLLs have two apparently identical entry points?解决了这个问题
我不得不在original solution上做一个改变。
[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。
https://stackoverflow.com/questions/73933213
复制相似问题