winform把网络共享目录映射为本地驱动器&局域网内copy文件

来源:互联网 发布:php项目经验 编辑:程序博客网 时间:2024/06/05 03:12

http://blog.csdn.net/knight94/article/details/631309

要映射一个网络目录为本地驱动器,需要调用系统DLLWNetAddConnection2函数来进行添加。

首先,系统函数的申明如下:

using System.Runtime.InteropServices;

 

    [DllImport("mpr.dll", EntryPoint="WNetAddConnection2")]

    public static extern uint WNetAddConnection2(

[In] NETRESOURCE lpNetResource,

string lpPassword,

string lpUsername,

uint dwFlags);

 

    [DllImport("Mpr.dll")]

    public static extern uint WNetCancelConnection2(

string lpName,

uint dwFlags,

bool fForce);

 

    [StructLayout(LayoutKind.Sequential)]

    public class NETRESOURCE

    {   

        public int dwScope;   

        public int dwType;

        public int dwDisplayType;   

        public int dwUsage;   

        public string LocalName;   

        public string RemoteName;   

        public string Comment;   

        public string Provider;

    }

 

    添加映射网络驱动器调用的代码如下:

    NETRESOURCE myNetResource = new NETRESOURCE();       

    myNetResource.dwScope = 2;       //2:RESOURCE_GLOBALNET           

    myNetResource.dwType = 1 ;       //1:RESOURCETYPE_ANY            

    myNetResource.dwDisplayType = 3; //3:RESOURCEDISPLAYTYPE_GENERIC          

    myNetResource.dwUsage = 1;       //1: RESOURCEUSAGE_CONNECTABLE    

    myNetResource.LocalName = "T:";       

    myNetResource.RemoteName = yourNetworkPath;       

    myNetResource.Provider = null;       

 

    uint nret = WNetAddConnection2( myNetResource, pwd, username, 0);

    注意:如果正确,返回值是0;否则错误。

 

    删除映射网络驱动器调用的代码如下:

    uint nret = WNetCancelConnection2( yourNetDriveName, 1,true);

//局域网内copy文件

        private void button1_Click(object sender, EventArgs e)
        {
            if (Ping(remoteHost))
   {
    if (Connect(remoteHost,"账号","密码"))
    {
        File.Copy("E:\\OpenForm.txt",@"\\192.168.1.21\file\chs.txt", true);//将OpenForm.txt内容copy到chs.txt中
    }
   }
        }
        public static bool Ping(string remoteHost)
        {
         
            bool Flag = false; //是否在线  
             Ping ping = new Ping();
             PingReply pingReply = ping.Send(remoteHost); 
             if (pingReply.Status == IPStatus.Success) 
             {
                 Flag = true; 
                  Console.WriteLine("当前在线,已ping通!"); 
             } 
             else  
             { 
                  Console.WriteLine("不在线,ping不通!"); 
             } 
        
            return Flag;
        }

        public static bool Connect(string remoteHost, string userName, string passWord)
        {
            if (!Ping(remoteHost))
            {
                return false;
            }
            bool Flag = true;
            Process proc = new Process();
            try
            {
                proc.StartInfo.FileName = "cmd.exe";
                proc.StartInfo.UseShellExecute = false;
                proc.StartInfo.RedirectStandardInput = true;
                proc.StartInfo.RedirectStandardOutput = true;
                proc.StartInfo.RedirectStandardError = true;
                proc.StartInfo.CreateNoWindow = true;
                proc.Start();
                string dosLine = @"net use \\" + remoteHost + " " + passWord + " " + " /user:" + userName + ">NUL";
                proc.StandardInput.WriteLine(dosLine);
                proc.StandardInput.WriteLine("exit");
                while (proc.HasExited == false)
                {
                    proc.WaitForExit(1000);
                }
                string errormsg = proc.StandardError.ReadToEnd();
                if (errormsg != "")
                {
                    Flag = false;
                }
                proc.StandardError.Close();
            }
            catch (Exception ex)
            {
                Flag = false;
            }
            finally
            {
                try
                {
                    proc.Close();
                    proc.Dispose();
                }
                catch
                {
                }
            }
            return Flag;
        }

 

0 0