C# 程序之间传参数,Args 接收参数的处理

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

  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程序测试):

  调用方程序:

  using System;

  using System.Collections.Generic;

  using System.Linq;

  using System.Text;

  using System.Diagnostics;

  namespace argTest1

  {

  class Program

  {

  static void Main ( string[ ] args )

  {

  Console.WriteLine ( "Begin test");

  Process p=new Process ( );

  p.StartInfo.FileName = ".\\argTest.exe";

  p.StartInfo.UseShellExecute = true;

  ArgsBuilder arg=new ArgsBuilder ( );

  arg.Add ( "hello");

  arg.Add ( "D:\\小工具\\Assistant.exe" );

  arg.Add ( AppDomain.CurrentDomain.BaseDirectory);

  arg.Add ( "D:\\Program files\\Baidu Yun\\Auto Update\\");

  arg.Add ( "D:/Program files/Baidu Yun/Auto Update/" );

  arg.Add ( "Arg Ends" );

  p.StartInfo.Arguments = arg.ToString ( );

  p.Start ( );

  Console.ReadLine ( );

  }

  ///

  /// 参数构建类

  ///

  public class ArgsBuilder

  {

  StringBuilder _arg=new StringBuilder();

  public ArgsBuilder()

  {

  _arg.Append ( "");

  }

  ///

  /// 添加参数

  ///

  ///

  public void Add(string str)

  {

  if ( str.EndsWith ( "\\" ) ) //处理最后若为“\\”,会被转义成“\”,然后变成转义符。

  {

  str += "\\";

  }

  _arg .AppendFormat( "\"{0}\"",str );

  _arg.Append ( " "); //参数分割符号

  }

  public override string ToString()

  {

  return _arg.ToString();

  }

  }

  }

  }

  复制代码

  被调用方:

  using System;

  using System.Collections.Generic;

  using System.Linq;

  using System.Text;

  using System.IO;

  namespace argTest

  {

  class Program

  {

  static void Main ( string[ ] args )

  {

  if(args!=null && args.Length>0) //打印出参数

  {

  foreach ( var item in args )

  {

  Console.WriteLine (item );

  }

  }

  if(File.Exists(args[1]))

  {

  System.Diagnostics.Process.Start ( args[1]);

  }

  string s=Console.ReadLine ( );

  }

  }

  }

  复制代码(编辑:雷林鹏 来源:网络)

posted @ 2018-08-03 10:28  雷林鹏  阅读(903)  评论(0编辑  收藏  举报