我需要访问从另一个域找到的以下目录到我的c#程序中。我该怎么办?我应该使用Impersonate方法吗?
string[] files = Directory.GetFiles(@"\\testweb\folder\test", "*.txt");
请帮忙。
答案 0 :(得分:0)
在执行此操作之前,您需要以编程方式(如果您希望解决此问题)与适当的用户创建与域的连接。你可以使用这个类来完成它:
public class MprWrapper
{
[DllImport("Mpr.dll")]
private static extern int WNetUseConnection(
IntPtr hwndOwner,
_NETRESOURCE lpNetResource,
string lpPassword,
string lpUserID,
int dwFlags,
string lpAccessName,
string lpBufferSize,
string lpResult
);
struct _NETRESOURCE
{
public int dwScope;
public int dwType;
public int dwDisplayType;
public int dwUsage;
public string lpLocalName;
public string lpRemoteName;
public string lpComment;
public string lpProvider;
}
public static void WNetUseConnection(string remoteName, string user, string pass)
{
_NETRESOURCE myStruct = new _NETRESOURCE
{
dwType = 1, //it's a disk (0 is any, 2 is printer)
lpRemoteName = remoteName
};
int error = WNetUseConnection(new IntPtr(0), myStruct, pass, user, 0, null, null, null);
if (error != 0)
{
throw new Exception("That didn't work either");
}
// if we reach here then everything worked!!!
}
}
您与
连接 MprWrapper.WNetUseConnection(@"\\DomainAddressHere", @"Domain\User", "Password1");
然后你的getfiles方法将正常工作。这可能会留下一个开放的连接(但它不会创建多个连接),但无论如何你可能想创建代码来关闭它,正确处理所有事情等等。这只是一个起点。