?http://blog.csdn.net/lovefootball/article/details/2827139
在做内部OA的时候,我们经常会碰到在局域网内传递文件,方法有很多,比如FTP,WebService,WMI等等
今天我要说的是最简单的一种方法,就是利用DOS命令去连接对方的机器,然后就像操作本地的文件一样了
主要用到的命令就是ping和net use命令,思路就是先检查对方机器是否可以ping通,如果可以ping通,那么再使用net use命令去连接对方机器,连接成功则直接使用File类下面的方法,就像操作本地机器一样的。
DOS大家应该用的很多吧,我就不详细的说了,这两个命令具体参考下(http://tech.163.com/06/0624/21/2KDND4CR00091VCV.html和http://tech.163.com/06/0624/21/2KDNIV3G00091VCV.html)
那么在.NET中如何使用这两个命令呢?很简单,就是使用Process类调用cmd.exe,有关Process的更多信息请参考MSDN(http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx)
?
首先我们先看看ping的方法
-
-
-
public?static?bool?Ping(string?remoteHost)
- {
-
????bool?Flag?=?false;
-
????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?=?@"ping?-n?1?"?+?remoteHost;
- ????????proc.StandardInput.WriteLine(dosLine);
-
????????proc.StandardInput.WriteLine("exit");
-
????????while?(!proc.HasExited)
- ????????{
- ????????????proc.WaitForExit(500);
- ????????}
-
????????string?pingResult?=?proc.StandardOutput.ReadToEnd();
-
????????if?(pingResult.IndexOf("(0%?loss)")?!=?-1)
- ????????{
-
????????????Flag?=?true;
- ????????}
- ????????proc.StandardOutput.Close()?;
- ????}
-
????catch?(Exception?ex)
- ????{
- ????}
-
????finally
- ????{
- ????????proc.Close();
- ????????proc.Dispose();
- ????}
-
????return?Flag;
- }
接下来就是使用net use连接对方机器
?
-
-
-
public?static?bool?Connect(string?remoteHost,?string?userName,?string?passWord)
- {
-
????bool?Flag?=?false;
-
????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)
- ????????{
- ????????????proc.WaitForExit(1000);
- ????????}
-
????????string?errormsg?=?proc.StandardError.ReadToEnd();
- ????????proc.StandardError.Close();
-
????????if?(String.IsNullOrEmpty(errormsg))
- ????????{
-
????????????Flag?=?true;
- ????????}
- ????}
-
????catch?(Exception?ex)
- ????{
- ????}
-
????finally
- ????{
- ????????proc.Close();
- ????????proc.Dispose();
- ????}
-
????return?Flag;
- }
如果连接成功,则可以使用FIle下面的方法,比如Copy文件等操作
注意:路径不要写错了!!!
还有就是使用完毕后再执行一遍net use命令,此时跟的参数是 /delete ,作用不用我说了吧^_^