2016-02-01 33 views
1

我有一个类库在应用程序中作为[用户a]运行。应用程序需要从已设置为共享的网络位置获取文件(它们的名称和内容)。共享位于Windows环境中,并位于运行该应用程序的相同域中。从需要用户名和密码的UNC路径获取文件

运行的应用程序: 用户帐户:[用户] 域:myDomain的

网络共享: 用户能够访问:用户B] 分享:\ 192.168.1.1 \文件夹 域:myDomain的

我需要在应用程序内连接到\ 192.168.1.1 \ folder \文件夹和我的文件\并获得文件名和它们的内容。一个简单的Directory.GetFiles应该没问题(如果可能的话)。

我已经看过一些在线讨论NetworkCredentials但正在传递给Web请求的答案。我只想在标准目录IO列表中使用它并收集文件内容。

我觉得应该有办法做到这一点,而不必使用某人的400线长的项目 - 当然,我可以很容易地用.NET来做到这一点,我只是不知道要使用哪个类。

干杯,

回答

0

像这样:

#region WNetUseConnection 

[DllImport("Mpr.dll", EntryPoint = "WNetUseConnection", CallingConvention = CallingConvention.Winapi)] 
private static extern int WNetUseConnection(IntPtr hwndOwner, NETRESOURCE lpNetResource, string lpPassword, string lpUserID, int dwFlags, string lpAccessName, string lpBufferSize, string lpResult); 

[DllImport("Mpr.dll", EntryPoint = "WNetCancelConnection2", CallingConvention = CallingConvention.Winapi)] 
private static extern int WNetCancelConnection2(string lpName, int dwFlags, bool fForce); 

[StructLayout(LayoutKind.Sequential)] 
private class NETRESOURCE 
{ 
    public ResourceScope dwScope = 0; 
    public ResourceType dwType = 0; 
    public ResourceDisplayType dwDisplayType = 0; 
    public ResourceUsage dwUsage = 0; 
    public string lpLocalName = null; 
    public string lpRemoteName = null; 
    public string lpComment = null; 
    public string lpProvider = null; 
}; 

public enum ResourceScope 
{ 
    RESOURCE_CONNECTED = 1, 
    RESOURCE_GLOBALNET, 
    RESOURCE_REMEMBERED, 
    RESOURCE_RECENT, 
    RESOURCE_CONTEXT 
}; 

public enum ResourceType 
{ 
    RESOURCETYPE_ANY, 
    RESOURCETYPE_DISK, 
    RESOURCETYPE_PRINT, 
    RESOURCETYPE_RESERVED 
}; 

public enum ResourceUsage 
{ 
    RESOURCEUSAGE_CONNECTABLE = 0x00000001, 
    RESOURCEUSAGE_CONTAINER = 0x00000002, 
    RESOURCEUSAGE_NOLOCALDEVICE = 0x00000004, 
    RESOURCEUSAGE_SIBLING = 0x00000008, 
    RESOURCEUSAGE_ATTACHED = 0x00000010, 
    RESOURCEUSAGE_ALL = (RESOURCEUSAGE_CONNECTABLE | RESOURCEUSAGE_CONTAINER | RESOURCEUSAGE_ATTACHED), 
}; 

public enum ResourceDisplayType 
{ 
    RESOURCEDISPLAYTYPE_GENERIC, 
    RESOURCEDISPLAYTYPE_DOMAIN, 
    RESOURCEDISPLAYTYPE_SERVER, 
    RESOURCEDISPLAYTYPE_SHARE, 
    RESOURCEDISPLAYTYPE_FILE, 
    RESOURCEDISPLAYTYPE_GROUP, 
    RESOURCEDISPLAYTYPE_NETWORK, 
    RESOURCEDISPLAYTYPE_ROOT, 
    RESOURCEDISPLAYTYPE_SHAREADMIN, 
    RESOURCEDISPLAYTYPE_DIRECTORY, 
    RESOURCEDISPLAYTYPE_TREE, 
    RESOURCEDISPLAYTYPE_NDSCONTAINER 
}; 

#endregion WNetUseConnection 

这里是如何使用它: (这是不够的,如果你这样做一次,你不必在每次访问之前重蹈覆辙。对共享)

// Initialize connection to file share 
NETRESOURCE nr = new NETRESOURCE(); 
nr.dwType = ResourceType.RESOURCETYPE_DISK; 
nr.lpRemoteName = "\\192.168.1.1"; 

string user = "user B"; 
string password = "password for user B"; 

WNetUseConnection(IntPtr.Zero, nr, password, user, 0, null, null, null); 
+0

我只注意到我自己,当我有同样的问题,没有在这里找到这个代码:[链接](http://stackoverflow.com/a/1441845/3318781) – Christophe