2016-02-01 73 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