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,  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

 

 

目录
相关文章
|
2月前
计算机网络:思科实验【1-访问WEB服务器】
计算机网络:思科实验【1-访问WEB服务器】
计算机网络:思科实验【1-访问WEB服务器】
|
4月前
|
网络协议
地址重叠时,用户如何通过NAT访问对端IP网络?
地址重叠时,用户如何通过NAT访问对端IP网络?
|
6月前
|
数据采集 JSON API
C#网络爬虫实例:使用RestSharp获取Reddit首页的JSON数据并解析
C#网络爬虫实例:使用RestSharp获取Reddit首页的JSON数据并解析
|
9天前
|
运维 安全 Cloud Native
安全访问服务边缘(SASE):网络新时代的安全与连接解决方案
SASE(安全访问服务边缘)是一种云基安全模型,结合了网络功能和安全策略,由Gartner在2019年提出。它强调身份驱动的私有网络、云原生架构和全面边缘支持,旨在解决传统WAN和安全方案的局限性,如高延迟和分散管理。SASE通过降低IT成本、提升安全响应和网络性能,应对数据分散、风险控制和访问速度等问题,适用于移动办公、多分支办公等场景。随着网络安全挑战的增加,SASE将在企业的数字化转型中扮演关键角色。
|
7月前
|
Java 网络安全 API
Java网络编程:实现远程文件访问与管理
Java是一门强大的编程语言,具有广泛的网络编程功能。在本篇博客中,我们将深入探讨如何使用Java编写应用程序,实现远程文件访问和管理。这是一个有趣且实用的主题,特别适合那些希望构建网络文件系统、实现文件共享或进行远程文件操作的开发人员。
153 0
|
3月前
|
数据采集 监控 调度
C#网络爬虫之TianyaCrawler实战经验分享
C#网络爬虫之TianyaCrawler实战经验分享
|
3月前
|
程序员 C#
C# 面向对象编程进阶:构造函数详解与访问修饰符应用
构造函数是一种特殊的方法,用于初始化对象。构造函数的优势在于,在创建类的对象时调用它。它可以用于为字段设置初始值
47 1
|
7月前
|
数据可视化 网络安全 网络虚拟化
如何搭建虚拟专有网络访问公司内网
如何搭建虚拟专有网络访问公司内网
244 0
|
4月前
|
缓存 Android开发 数据安全/隐私保护
android开发,使用kotlin学习HTTP访问网络
android开发,使用kotlin学习HTTP访问网络
74 0
|
4月前
|
数据采集 JSON JavaScript
C# 解析“JSON“格式数据和网络实战案例 入门
C# 解析“JSON“格式数据和网络实战案例 入门