Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从UNC路径获取需要用户名和密码的文件_C#_Unc_Networkcredentials - Fatal编程技术网

C# 从UNC路径获取需要用户名和密码的文件

C# 从UNC路径获取需要用户名和密码的文件,c#,unc,networkcredentials,C#,Unc,Networkcredentials,我有一个类库,它在应用程序中以[user a]的身份运行。应用程序需要从已设置为共享的网络位置获取文件(其名称和内容)。共享位于Windows环境中,并且位于运行应用程序的同一域上 正在运行的应用程序: 用户帐户:[用户a] 域名:myDomain 网络共享: 能够访问的用户:[用户b] 共享:\192.168.1.1\文件夹 域名:myDomain 我需要在应用程序中连接到\192.168.1.1\folder\folder with my files\并获取文件名及其内容。简单的Direct

我有一个类库,它在应用程序中以[user a]的身份运行。应用程序需要从已设置为共享的网络位置获取文件(其名称和内容)。共享位于Windows环境中,并且位于运行应用程序的同一域上

正在运行的应用程序: 用户帐户:[用户a] 域名:myDomain

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

我需要在应用程序中连接到\192.168.1.1\folder\folder with my files\并获取文件名及其内容。简单的Directory.GetFiles应该可以(如果可能的话)

我在网上看到了一些关于网络凭据的答案,但这些答案正在传递给web请求。我只想在标准目录IO列表中使用它并收集文件内容

我觉得应该有一种方法可以做到这一点,而不必使用某人的400行长的项目——当然,我可以用.NET轻松地做到这一点,我只是不知道使用哪个类

干杯,像这样:

#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
下面是如何使用它: (只要这样做一次就足够了,您不必在每次访问共享之前重复。)

像这样:

#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
下面是如何使用它: (只要这样做一次就足够了,您不必在每次访问共享之前重复。)


我只是注意到我自己,当我有同样的问题时,确实在这里找到了这个代码:我只是注意到我自己,当我有同样的问题时,确实在这里找到了这个代码: