zoukankan      html  css  js  c++  java
  • 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”,“filesBaidu”,“YunAuto”,“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 ( );

      }

      }

      }

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

  • 相关阅读:
    【Go语言】I/O专题
    【Go语言】集合与文件操作
    【Go语言】LiteIDE使用的个人使用方法
    【Go语言】错误与异常处理机制
    【Go语言】面向对象扩展——接口
    【Go语言】学习资料
    创建型模式(前引)简单工厂模式Simple Factory
    redis demo
    导出CSV格式
    mongo聚合命令
  • 原文地址:https://www.cnblogs.com/pengpeng1208/p/9412508.html
Copyright © 2011-2022 走看看