查看: 1934|回复: 0

[ASP.NET教程] C# 程序之间传参数,Args 接收参数的处理

发表于 2018-3-22 08:00:01

备忘,或者留给暂未接触但需要了解的人。

  C#在一个进程内传参数方法那是相当多,但是涉及到程序之间传参数就不是那么方便了(当然socket,内存共享等方式属于另一类,此处不讨论),我们的C或者C#,亦或者Java等在Main的函数入口处都会有一个参数Arg或者Args就是留出来方便自己被第三方软件调用的时候传入参数的,俗称启动参数。

最近在使用的时候,我需要传入一个路径,并且路径中存在一些空格之类的符号,接收方始终接受错误,这个如何处理呢?由于一般传参时时输入一个string,接收方可以时string arg或者时string[] args,所以默认是使用空格来分割string类型的参数为string[]的。所以如果传入"D:\\Program files\\Baidu Yun\\Auto Update\\"这样一个参数就会变成“D:\Program”,“files\Baidu”,“Yun\Auto”,“Update\”形式,那该怎么办呢? 可以使用双引号("")把一个参数括起来,这里面还需要注意参数末尾带有“\”的问题。

  

做了如下实例验证通过(都在C#里,没有测试调用C/java程序测试):

调用方程序:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Diagnostics;
  6. namespace argTest1
  7. {
  8. class Program
  9. {
  10. static void Main ( string[ ] args )
  11. {
  12. Console.WriteLine ( "Begin test");
  13. Process p=new Process ( );
  14. p.StartInfo.FileName = ".\\argTest.exe";
  15. p.StartInfo.UseShellExecute = true;
  16. ArgsBuilder arg=new ArgsBuilder ( );
  17. arg.Add ( "hello");
  18. arg.Add ( "D:\\小工具\\Assistant.exe" );
  19. arg.Add ( AppDomain.CurrentDomain.BaseDirectory);
  20. arg.Add ( "D:\\Program files\\Baidu Yun\\Auto Update\\");
  21. arg.Add ( "D:/Program files/Baidu Yun/Auto Update/" );
  22. arg.Add ( "Arg Ends" );
  23. p.StartInfo.Arguments = arg.ToString ( );
  24. p.Start ( );
  25. Console.ReadLine ( );
  26. }
  27. <br> /// <summary><br> /// 参数构建类<br> /// </summary>
  28. public class ArgsBuilder
  29. {
  30. StringBuilder _arg=new StringBuilder();
  31. public ArgsBuilder()
  32. {
  33. _arg.Append ( "");
  34. }
  35. /// <summary>
  36. /// 添加参数
  37. /// </summary>
  38. /// <param name="str"></param>
  39. public void Add(string str)
  40. {
  41. if ( str.EndsWith ( "\\" ) ) //处理最后若为“\\”,会被转义成“\”,然后变成转义符。
  42. {
  43. str += "\\";
  44. }<br> _arg .AppendFormat( "\"{0}\"",str );
  45. _arg.Append ( " "); //参数分割符号
  46. }
  47. public override string ToString()
  48. {
  49. return _arg.ToString();
  50. }
  51. }
  52. }
  53. }
复制代码

被调用方:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.IO;
  6. namespace argTest
  7. {
  8. class Program
  9. {
  10. static void Main ( string[ ] args )
  11. {
  12. if(args!=null && args.Length>0) //打印出参数
  13. {
  14. foreach ( var item in args )
  15. {
  16. Console.WriteLine (item );
  17. }
  18. }
  19. if(File.Exists(args[1]))
  20. {
  21. System.Diagnostics.Process.Start ( args[1]);
  22. }
  23. string s=Console.ReadLine ( );
  24. }
  25. }
  26. }
复制代码

结果:



回复

使用道具 举报