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

  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 ( );
}

        /// <summary>
        /// 参数构建类
        /// </summary>
public class ArgsBuilder
{
StringBuilder _arg=new StringBuilder();
public ArgsBuilder()
{
_arg.Append ( "");
} /// <summary>
/// 添加参数
/// </summary>
/// <param name="str"></param>
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>) //打印出参数
{
foreach ( var item in args )
{
Console.WriteLine (item );
}
}
if(File.Exists(args[]))
{
System.Diagnostics.Process.Start ( args[]);
} string s=Console.ReadLine ( );
}
}
}

结果:

C# 程序之间传参数,Args 接收参数的处理的更多相关文章

  1. C# Winform程序之间如何传递和接收参数 Process

    Program: static class Program    { /// <summary>         /// 应用程序的主入口点.         /// </summa ...

  2. asp.net Get和Post传参和接收参数

    asp.netGet和Post传参和接收参数 Get请求: 对于传参:test.aspx?name=%e5%bc%a0%e4%b8%89 接收参数的方法: Request.QueryString[&q ...

  3. Jquery Datatables 请求参数及接收参数处理

    Jquery Datatables 请求参数及接收参数处理 /** * Created by wb-wuyifu on 2016/8/9. */ /** * Created by wb-wuyifu ...

  4. uploadify上传带参数及接收参数的方法

    function uploadify() { $("#uploadify").uploadify({ method:'post', uploader: '/Manage/Order ...

  5. vue 路由传参 、接收参数

    传参组件 一. <router-link :to='"/main/course?navName=" +item.columnName + "&id=&quo ...

  6. vue-router query和params 传参和接收参数

    1.params 方式传递和接收参数 //传参 this.$router.push({ name: 'checkDetailInfo', params:{ fkdNum:fkdNum, jyayStr ...

  7. js跳转到新页面传参以及接收参数的方法

    1.传递参数: window.location.href = "./list.html?id="+id; 1.接收参数: (1)接收参数函数封装 function GetReque ...

  8. 关于C#控制台传递参数和接收参数

    前言: 写了这么久程序,今天才知道的一个基础知识点,就是程序入口 static void Main(string[] args) 里的args参数是什么意思 ?惭愧... 需求: 点击一个button ...

  9. 于C#控制台传递参数和接收参数

    前言: 写了这么久程序,今天才知道的一个基础知识点,就是程序入口 static void Main(string[] args) 里的args参数是什么意思 ?惭愧... 需求: 点击一个button ...

随机推荐

  1. linux下双网卡的绑定

    如果服务器上有两快网卡就可以把它绑定为一块虚拟的网卡,如果一块网卡坏了另一块还可以继续工作,增加了冗余度和负载,具体做法如下: 新建一个虚拟的网卡,命令如下: iv /etc/sysconfig/ne ...

  2. 洛谷 P2073 送花【Treap】题解+AC代码

    题目背景 小明准备给小红送一束花,以表达他对小红的爱意.他在花店看中了一些花,准备用它们包成花束. 题目描述 这些花都很漂亮,每朵花有一个美丽值W,价格为C. 小明一开始有一个空的花束,他不断地向里面 ...

  3. Java中InputStream装饰器模式的大家族

    本文写在po主初学JAVA时,在学习inputStream摸不着头脑,受Java IO-InputStream家族 -装饰者模式一文启发,所以在理清思路时写下本文.因为初学,如有错误,望指正. 因为和 ...

  4. 搬砖的也能学Python----if - elif 语句

    引入:如果平时执行的过程超过两个分支,则使用if-elif语句 if-elif 语句结构 if 判断条件: 要执行的代码 elif 判断条件: 要执行的代码 -- else: 要执行的代码 判断条件: ...

  5. window下nginx注册成服务

    1. a.下载windows版nginx (http://nginx.org/download/nginx-1.10.0.zip),并且下载注册服务工具, b.下载地址: http://repo.je ...

  6. 【前端】Vue2全家桶案例《看漫画》之二、完成首页基本样式

    转载请注明出处:http://www.cnblogs.com/shamoyuu/p/vue_vux_app_2.html 项目github地址:https://github.com/shamoyuu/ ...

  7. Linux传统Huge Pages与Transparent Huge Pages再次学习总结

      Linux下的大页分为两种类型:标准大页(Huge Pages)和透明大页(Transparent Huge Pages).Huge Pages有时候也翻译成大页/标准大页/传统大页,它们都是Hu ...

  8. Android常见Crash类型分析(一)

    问题1.   java.lang.IllegalStateException: The specified child already has a parent. You must call remo ...

  9. R语言︱数据集分组、筛选(plit – apply – combine模式、dplyr、data.table)

    R语言︱数据集分组 大型数据集通常是高度结构化的,结构使得我们可以按不同的方式分组,有时候我们需要关注单个组的数据片断,有时需要聚合不同组内的信息,并相互比较. 一.日期分组 1.关于时间的包都有很多 ...

  10. 打开CSDN论坛出现403

    打开CSDN论坛出现403 在查找资料的过程中,出现"403-禁止访问"