yf86810_163_com 发表于 2013-2-1 11:20:39

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    }        public struct NETRESOURCE    {      public RESOURCE_SCOPE dwScope;      public RESOURCE_TYPE dwType;      public RESOURCE_DISPLAYTYPE dwDisplayType;      public RESOURCE_USAGE dwUsage;            public string lpLocalName;            public string lpRemoteName;            public string lpComment;            public string lpProvider;    }    public class NetworkConnection    {            public static extern int WNetAddConnection2A (NETRESOURCE[] lpNetResource, string lpPassword, string lpUserName, int dwFlags);            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;            share_driver.dwScope = RESOURCE_SCOPE.RESOURCE_GLOBALNET;            share_driver.dwType = RESOURCE_TYPE.RESOURCETYPE_DISK;            share_driver.dwDisplayType = RESOURCE_DISPLAYTYPE.RESOURCEDISPLAYTYPE_SHARE;            share_driver.dwUsage = RESOURCE_USAGE.RESOURCEUSAGE_CONNECTABLE;            share_driver.lpLocalName = localPath;            share_driver.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
页: [1]
查看完整版本: C# 访问网络路径共享目录