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

 

 

目录
相关文章
|
7月前
|
网络协议 Linux 虚拟化
配置VM网络:如何设定静态IP以访问主机IP和互联网
以上就是设定虚拟机网络和静态IP地址的基本步骤。需要注意的是,这些步骤可能会因为虚拟机软件、操作系统以及网络环境的不同而有所差异。在进行设定时,应根据具体情况进行调整。
523 10
|
7月前
|
存储 机器学习/深度学习 监控
网络管理监控软件的 C# 区间树性能阈值查询算法
针对网络管理监控软件的高效区间查询需求,本文提出基于区间树的优化方案。传统线性遍历效率低,10万条数据查询超800ms,难以满足实时性要求。区间树以平衡二叉搜索树结构,结合节点最大值剪枝策略,将查询复杂度从O(N)降至O(logN+K),显著提升性能。通过C#实现,支持按指标类型分组建树、增量插入与多维度联合查询,在10万记录下查询耗时仅约2.8ms,内存占用降低35%。测试表明,该方案有效解决高负载场景下的响应延迟问题,助力管理员快速定位异常设备,提升运维效率与系统稳定性。
322 4
|
8月前
|
Shell 开发工具 git
使用代理访问网络各项命令总结
工作中常需设置代理,容易导致环境混乱。本文总结了 SourceTree 无法拉取代码的问题,排查了环境变量、Git 全局配置及系统代理设置,最终通过清除 Git 代理配置解决。内容涵盖排查步骤、命令整理及脚本处理,帮助快速定位并解决代理相关网络问题。
437 3
|
安全 网络安全 数据安全/隐私保护
访问控制列表(ACL)是网络安全中的一种重要机制,用于定义和管理对网络资源的访问权限
访问控制列表(ACL)是网络安全中的一种重要机制,用于定义和管理对网络资源的访问权限。它通过设置一系列规则,控制谁可以访问特定资源、在什么条件下访问以及可以执行哪些操作。ACL 可以应用于路由器、防火墙等设备,分为标准、扩展、基于时间和基于用户等多种类型,广泛用于企业网络和互联网中,以增强安全性和精细管理。
2168 7
|
消息中间件 存储 Serverless
函数计算产品使用问题之怎么访问网络附加存储(NAS)存储模型文件
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
12月前
|
域名解析 监控 网络协议
21.7K star!再见吧花生壳,没有公网ip,也能搞定所有网络访问!内网穿透神器NPS
“nps”是一款强大的内网穿透工具,支持多种协议与功能。它无需公网IP或复杂配置,可实现远程桌面、文件共享和私有云搭建等。项目采用Go语言开发,具有高性能与轻量级特点,适用于远程办公、物联网管理等场景。其核心亮点包括零配置穿透、多级代理网络、实时流量监控及企业级安全特性。对比同类工具,“nps”在安装复杂度、协议支持和管理界面方面表现优异。项目地址:https://github.com/ehang-io/nps。
2708 12
|
缓存 监控 算法
基于 C# 网络套接字算法的局域网实时监控技术探究
在数字化办公与网络安全需求增长的背景下,局域网实时监控成为企业管理和安全防护的关键。本文介绍C#网络套接字算法在局域网实时监控中的应用,涵盖套接字创建、绑定监听、连接建立和数据传输等操作,并通过代码示例展示其实现方式。服务端和客户端通过套接字进行屏幕截图等数据的实时传输,保障网络稳定与信息安全。同时,文章探讨了算法的优缺点及优化方向,如异步编程、数据压缩与缓存、错误处理与重传机制,以提升系统性能。
322 2
|
安全 程序员 Linux
全球头号勒索软件来袭!即刻严控网络访问
全球头号勒索软件来袭!即刻严控网络访问
|
算法 网络协议 Python
探秘Win11共享文件夹之Python网络通信算法实现
本文探讨了Win11共享文件夹背后的网络通信算法,重点介绍基于TCP的文件传输机制,并提供Python代码示例。Win11共享文件夹利用SMB协议实现局域网内的文件共享,通过TCP协议确保文件传输的完整性和可靠性。服务器端监听客户端连接请求,接收文件请求并分块发送文件内容;客户端则连接服务器、接收数据并保存为本地文件。文中通过Python代码详细展示了这一过程,帮助读者理解并优化文件共享系统。
|
Kubernetes 网络协议 应用服务中间件
Kubernetes Ingress:灵活的集群外部网络访问的利器
《Kubernetes Ingress:集群外部访问的利器-打造灵活的集群网络》介绍了如何通过Ingress实现Kubernetes集群的外部访问。前提条件是已拥有Kubernetes集群并安装了kubectl工具。文章详细讲解了Ingress的基本组成(Ingress Controller和资源对象),选择合适的版本,以及具体的安装步骤,如下载配置文件、部署Nginx Ingress Controller等。此外,还提供了常见问题的解决方案,例如镜像下载失败的应对措施。最后,通过部署示例应用展示了Ingress的实际使用方法。
962 2