六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 48|回复: 0

C# 访问网络路径共享目录

[复制链接]

升级  18%

17

主题

17

主题

17

主题

秀才

Rank: 2

积分
77
 楼主| 发表于 2013-1-26 14:00:29 | 显示全部楼层 |阅读模式
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(@"\\tyb\TempImages", localpath, @"tyb", "0.");            if (status == (int)ERROR_ID.ERROR_SUCCESS)            {                FileStream fs = File.Open(localpath + @"\\1.txt", FileMode.Open,FileAccess.Read);                //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
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表