在我們用C#語言做內部OA系統時,會經常遇到在區域網路內傳遞檔案,當然實現的方法有很多,比如FTP,WebService,WMI等等
今天在這我要說的是最簡單的一種方法,就是利用DOS命令去串連對方的機器,然後就像操作本地的檔案一樣了
主要用到的命令就是ping和net use命令,思路就是先檢查對方機器是否可以ping通,如果可以ping通,那麼再使用net use命令去串連對方機器,串連成功則直接使用File類下面的方法,就像操作本地機器一樣的。
那麼在.NET中如何使用這兩個命令呢?很簡單,就是使用Process類調用cmd.exe.
1、首先我們先看看ping的方法
//返回true則代表可以ping成功<br /> //remoteHost為對方IP<br /> public static bool Ping(string remoteHost)<br /> {<br /> bool Flag = false;<br /> Process proc = new Process();<br /> try<br /> {<br /> proc.StartInfo.FileName = "cmd.exe";<br /> proc.StartInfo.UseShellExecute = false;<br /> proc.StartInfo.RedirectStandardInput = true;<br /> proc.StartInfo.RedirectStandardOutput = true;<br /> proc.StartInfo.RedirectStandardError = true;<br /> proc.StartInfo.CreateNoWindow = true;<br /> proc.Start();<br /> string dosLine = @"ping -n 1 " + remoteHost;<br /> proc.StandardInput.WriteLine(dosLine);<br /> proc.StandardInput.WriteLine("exit");<br /> while (!proc.HasExited)<br /> {<br /> proc.WaitForExit(500);<br /> }</p><p> string pingResult = proc.StandardOutput.ReadToEnd();<br /> if (pingResult.IndexOf("(0% loss)") != -1)<br /> {<br /> Flag = true;<br /> }<br /> proc.StandardOutput.Close();<br /> }<br /> catch (Exception ex)<br /> {<br /> }<br /> finally<br /> {<br /> proc.Close();<br /> proc.Dispose();<br /> }<br /> return Flag;<br /> }
2、接下來就是使用net use串連對方機器
//返回true則代表可以串連成功<br /> //remoteHost為對方IP userName為使用者名稱 passWord為密碼<br /> public static bool Connect(string remoteHost, string userName, string passWord)<br /> {<br /> bool Flag = false;<br /> Process proc = new Process();<br /> try<br /> {<br /> proc.StartInfo.FileName = "cmd.exe";<br /> proc.StartInfo.UseShellExecute = false;<br /> proc.StartInfo.RedirectStandardInput = true;<br /> proc.StartInfo.RedirectStandardOutput = true;<br /> proc.StartInfo.RedirectStandardError = true;<br /> proc.StartInfo.CreateNoWindow = true;<br /> proc.Start();<br /> string dosLine = @"net use //" + remoteHost + " " + passWord + " " + " /user:" + userName + ">NUL";<br /> proc.StandardInput.WriteLine(dosLine);<br /> proc.StandardInput.WriteLine("exit");<br /> while (!proc.HasExited)<br /> {<br /> proc.WaitForExit(1000);<br /> }<br /> string errormsg = proc.StandardError.ReadToEnd();<br /> proc.StandardError.Close();<br /> if (String.IsNullOrEmpty(errormsg))<br /> {<br /> Flag = true;<br /> }<br /> }<br /> catch (Exception ex)<br /> {<br /> }<br /> finally<br /> {<br /> proc.Close();<br /> proc.Dispose();<br /> }<br /> return Flag;<br /> }
3、測試代碼:
static void Main(string[] args)<br /> {<br /> String strIP = "127.0.0.1";<br /> Console.WriteLine("Ping Result:{0}", Ping(strIP));<br /> Console.WriteLine("Connect Result:{0}", Connect("127.0.0.1","Rocket","0511"));<br /> Console.Read();<br /> }