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

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

本文转载自CSDN博客,http://blog.csdn.net/aoyo/archive/2009/02/26/3939651.aspx

时间: 2024-10-16 07:51:10

C#实现访问网络共享文件夹的相关文章

访问局域网共享文件夹

帮公司下载数据,体积很大,一台机器装不完,几台机器一起下的话,最后合并太麻烦(list的维护),于是就想到在服务器上插一块大的硬盘,设置为共享,然后把数据都下载到服务器的这块硬盘上. (由于一些限制,不能再服务器上同时开多个下载器,所以只能在本地多开几台机器) 以前公司有一个网络硬盘,我把它映射到本地之后,可以通过映射的盘符直接访问,但是这次无法用同样的方式去访问. 解决方法是直接通过地址去访问:browseFile("\\\\192.168.0.100\\sed\\TickStockData&

Mac OS X 访问 Windows 共享文件夹

Mac OS X 访问 Windows 共享文件夹 mac没有网络邻居,但可以使用finder访问局域网中windows共享的文件 1.点击 Finder 前往菜单中的「前往服务器」(或快捷键 command+k) 2.在连接服务器对话框中输入「smb://Windows主机的IP地址」,其中 smb 是访问 Windows 共享文件夹所使用的协议名称,SMB:服务器信息块协议(Server Message Block protocol). 也可以使用计算机名 3.连接Windows主机后会显示

(转)linux访问windows共享文件夹的两种方法

有时需要在linux下访问window的共享文件,可以使用mount挂载或使用samba连接. 1,mount挂载 $ mkdir windows 将共享文件夹挂载到windows文件夹: mount -t cifs -o username=user,password=pwd //172.18.191.194/VWare_Systems hgfs 其中几个参数表示含义: cifs:Common Internet File System(微软出的,不必多深究),可以理解为网络文件系统 userna

citrix user profile management 用户配置存储到网络共享文件夹

在网上找了很多user profile management配了一天也没配好,最后翻墙在youtube上找到了答案,坑了我一天!!!!描述都不怎么明确,还是自己写篇blog,大家少走点弯路.给楼主支持就是对我最大的回报.blog会经常更新,望大家多多支持. 需求:用户配置重定向到网络共享文件夹上进行统一管理,登录时自动从共享文件夹上加载用户配置. 现有环境:AD域1台(win server 2012)+客户机1台(winxp)+citrix user profile management 4.1

linux访问windows共享文件夹的两种方法

有时需要在linux下需要访问windows的共享文件夹,可以使用mount挂载或者使用samba连接. 1.mount挂载 首先创建被挂载的目录: $ mkdir windows 将共享文件夹挂载到windows文件夹: $ sudo mount -t cifs -o username=share,password=share //192.168.66.198/share ./windows 其中几个参数表示含义: cifs:Common Internet File System,可以理解为网

Win10远程连接时出现的错误你不能访问此共享文件夹,因为你组织的安全策略...解决方法

1.打开运行,快捷键为windows+r 2.输入框内输入gpedit.msc打开本地组策略编辑器 3.依次找到“计算机配置”——“管理模板”——“网络”——“Lanman工作站” 4.点击“Lanman工作站”在本地策略编辑器的右侧,可以找到“启用不安全的来宾登录”,双击并选择“已启用”,点击确定. 5.重新连接 参考: 1)WIN10:你不能访问此共享文件夹,解决方法 原文地址:https://www.cnblogs.com/GjqDream/p/11757944.html

Mac电脑访问Windows共享文件夹,mac和windows文件夹共享教程

mac和windows两个不同的系统之间如何传输文件一定是很多小伙伴需要的教程,因为在工作中文件共享会节省很多传文件浪费的时间!小编为大家准备了Mac访问Windows共享文件夹教程,如何用mac电脑来访问windows中的共享文件夹?如何设置?小编都做了具体的总结,一起来看看吧! Mac访问Windows共享文件夹介绍: 第一步:在先Windows中新建文件夹e:iOS,右键设置共享属性 第二步:点击"高级共享" 第三步;点击"权限",设置你想要共享权限的用户完全

Win7无法访问Windows共享文件夹

解决方法如下 On the Windows 7 machine: Run secpol.msc Drill down through Local Policies | Security Options. Find Network Security: LAN Manager authentication level. Set this Send NTLM response only. Win7无法访问Windows共享文件夹

Linux访问windows共享文件夹

Linux访问windows共享文件夹 mount //192.168.1.109/log /root/windows/ -o username=administrator,password=123 mount -t cifs -o username="administrator",password="Admin123"  //192.168.101.188/a  /windows Ps: windows无密码时,密码可以为空:以及关闭win防火墙. 原文地址:ht