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

转自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,  1 1 );
        }

 

 

 调用方式:

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

 

 

posted on 2011-07-05 21:30 NET未来之路 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/archive/2011/07/05/2098677.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值