开发者社区> 杰克.陈> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

C# 实现访问网络共享文件夹

简介: 转自http://blog.csdn.net/aoyo/article/details/3939651   C#实现访问网络共享文件夹,使用 WNetAddConnection2A 和 WNetCancelConnection2A。
+关注继续查看

转自http://blog.csdn.net/aoyo/article/details/3939651

 

C#实现访问网络共享文件夹,使用 WNetAddConnection2A 和 WNetCancelConnection2A。

在目标服务器建立共享文件夹,建立访问账号test;

 

public enum ERROR_ID
    {
        ERROR_SUCCESS 
= 0,  // Success
        ERROR_BUSY = 170,
        ERROR_MORE_DATA 
= 234,
        ERROR_NO_BROWSER_SERVERS_FOUND 
= 6118,
        ERROR_INVALID_LEVEL 
= 124,
        ERROR_ACCESS_DENIED 
= 5,
        ERROR_INVALID_PASSWORD 
= 86,
        ERROR_INVALID_PARAMETER 
= 87,
        ERROR_BAD_DEV_TYPE 
= 66,
        ERROR_NOT_ENOUGH_MEMORY 
= 8,
        ERROR_NETWORK_BUSY 
= 54,
        ERROR_BAD_NETPATH 
= 53,
        ERROR_NO_NETWORK 
= 1222,
        ERROR_INVALID_HANDLE_STATE 
= 1609,
        ERROR_EXTENDED_ERROR 
= 1208,
        ERROR_DEVICE_ALREADY_REMEMBERED 
= 1202,
        ERROR_NO_NET_OR_BAD_PATH 
= 1203
    }

    
public enum RESOURCE_SCOPE
    {
        RESOURCE_CONNECTED 
= 1,
        RESOURCE_GLOBALNET 
= 2,
        RESOURCE_REMEMBERED 
= 3,
        RESOURCE_RECENT 
= 4,
        RESOURCE_CONTEXT 
= 5
    }

    
public enum RESOURCE_TYPE
    {
        RESOURCETYPE_ANY 
= 0,
        RESOURCETYPE_DISK 
= 1,
        RESOURCETYPE_PRINT 
= 2,
        RESOURCETYPE_RESERVED 
= 8,
    }

    
public enum RESOURCE_USAGE
    {
        RESOURCEUSAGE_CONNECTABLE 
= 1,
        RESOURCEUSAGE_CONTAINER 
= 2,
        RESOURCEUSAGE_NOLOCALDEVICE 
= 4,
        RESOURCEUSAGE_SIBLING 
= 8,
        RESOURCEUSAGE_ATTACHED 
= 16,
        RESOURCEUSAGE_ALL 
= (RESOURCEUSAGE_CONNECTABLE | RESOURCEUSAGE_CONTAINER | RESOURCEUSAGE_ATTACHED),
    }

    
public enum RESOURCE_DISPLAYTYPE
    {
        RESOURCEDISPLAYTYPE_GENERIC 
= 0,
        RESOURCEDISPLAYTYPE_DOMAIN 
= 1,
        RESOURCEDISPLAYTYPE_SERVER 
= 2,
        RESOURCEDISPLAYTYPE_SHARE 
= 3,
        RESOURCEDISPLAYTYPE_FILE 
= 4,
        RESOURCEDISPLAYTYPE_GROUP 
= 5,
        RESOURCEDISPLAYTYPE_NETWORK 
= 6,
        RESOURCEDISPLAYTYPE_ROOT 
= 7,
        RESOURCEDISPLAYTYPE_SHAREADMIN 
= 8,
        RESOURCEDISPLAYTYPE_DIRECTORY 
= 9,
        RESOURCEDISPLAYTYPE_TREE 
= 10,
        RESOURCEDISPLAYTYPE_NDSCONTAINER 
= 11
    }

    [StructLayout(LayoutKind.Sequential)]
    
public struct NETRESOURCE
    {
        
public RESOURCE_SCOPE dwScope;
        
public RESOURCE_TYPE dwType;
        
public RESOURCE_DISPLAYTYPE dwDisplayType;
        
public RESOURCE_USAGE dwUsage;

        [MarshalAs(UnmanagedType.LPStr)]
        
public string lpLocalName;

        [MarshalAs(UnmanagedType.LPStr)]
        
public string lpRemoteName;

        [MarshalAs(UnmanagedType.LPStr)]
        
public string lpComment;

        [MarshalAs(UnmanagedType.LPStr)]
        
public string lpProvider;
    }

 

    
public class NetworkConnection
    {

        [DllImport(
"mpr.dll")]
        
public static extern int WNetAddConnection2A (NETRESOURCE[] lpNetResource, string lpPassword, string lpUserName, int dwFlags);

        [DllImport(
"mpr.dll")]
        
public static extern int WNetCancelConnection2A (string sharename, int dwFlags, int fForce);


        
public static int Connect (string remotePath, string localPath, string username, string password)
        {
            NETRESOURCE[] share_driver 
= new NETRESOURCE[1];
            share_driver[
0].dwScope = RESOURCE_SCOPE.RESOURCE_GLOBALNET;
            share_driver[
0].dwType = RESOURCE_TYPE.RESOURCETYPE_DISK;
            share_driver[
0].dwDisplayType = RESOURCE_DISPLAYTYPE.RESOURCEDISPLAYTYPE_SHARE;
            share_driver[
0].dwUsage = RESOURCE_USAGE.RESOURCEUSAGE_CONNECTABLE;
            share_driver[
0].lpLocalName = localPath;
            share_driver[
0].lpRemoteName = remotePath;

            Disconnect(localPath);
            
int ret = WNetAddConnection2A(share_driver, password, username, 1);

            
return ret;
        }

        
public static int Disconnect (string localpath)
        {
            
return WNetCancelConnection2A(localpath, 11);
        }

 

 

 调用方式:

public static void TestNetWorkConnection()
        {
            
string localpath = "X:";
            
//int status = NetworkConnection.Connect(@"//192.168.0.2/test", localpath, @"test", "test");
            int status = NetworkConnection.Connect("////192.168.0.2//test", localpath, @"test""test");
            
if (status == (int)ERROR_ID.ERROR_SUCCESS)
            {
                FileStream fs 
= new FileStream(localpath + @"//123.txt", FileMode.OpenOrCreate);
                
using (StreamWriter stream = new StreamWriter(fs))
                {
                    stream.WriteLine(
"你好呀,成功了");
                    stream.Flush();
                    stream.Close();
                }
                fs.Close();
            }
            
else
            {
                Console.WriteLine(status);
            }
            NetworkConnection.Disconnect(localpath);
        }

 

参考文档:

http:
//support.microsoft.com/kb/173011

http:
//support.microsoft.com/kb/842789

 

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
用不同的用户名和密码登录网络上的共享文件夹
网络共享时,有时不同的文件夹需要不同的用户名和密码登入,而windows已经记录了一个原来使用的用户名及密码默认使用这个用户名及密码不再弹出用户名及密码输入提示对话框.简易解决办法.如下: 1、注销当前用户重新登入。
2161 0
+关注
杰克.陈
一个安静的程序猿~
10424
文章
2
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载