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

  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. Windows下Nginx的启动、停止等基本命令

    在Windows下使用Nginx,我们需要掌握一些基本的操作命令,比如:启动.停止Nginx服务,重新载入Nginx等,下面我就进行一些简单的介绍. 1.启动: C:\server\nginx-1.0 ...

  2. 来了解一下Mysql索引的相关知识:基础概念、性能影响、索引类型、创建原则、注意事项

    索引的基础概念索引类似于书籍的目录,要想找到一本书的某个特定主题,需要先查找书的目录,定位对应的页码:存储引擎使用类似的方式进行数据查询,先去索引当中找到对应的值,然后根据匹配的索引找到对应的数据行 ...

  3. java线程间通信1--简单实例

    线程通信 一.线程间通信的条件 1.两个以上的线程访问同一块内存 2.线程同步,关键字 synchronized 二.线程间通信主要涉及的方法 wait(); ----> 用于阻塞进程 noti ...

  4. Java集合框架(三)—— List、ArrayList、Vector、Stack

    List接口 List集合代表一个有序集合,集合中每一个元素都有其对应的顺序索引.List集合容许使用重复元素,可以通过索引来访问指定位置的集合对象. ArrayList和Vector实现类 Arra ...

  5. java网络编程(5)——Tcp

    Tcp相对于Udp就是面向连接的协议,最主要的特点要建立连接之后才能通信,客户端用Socket需要指点地址与端口,服务端用ServeSocket,只需指点监听某个端口,因为是面向连接,所以服务器端一定 ...

  6. mybatis与spring的整合(使用接口实现crud)

    本人刚刚接触mybatis,今天把它和spring整合起来用了一个上午==. 一开始是通过配置文件来配置,后来尝试用了一下注解,觉得mybatis的注解真的有点恶心...一大坨的,所以我还是建议使用配 ...

  7. scrapy回调函数传递参数

    scrapy.Request 的callback传参的两种方式 1.使用 lambda方式传递参数 def parse(self, response): for sel in response.xpa ...

  8. enable multi-tenancy on openstack pike

    Multi-tenancy 是openstack ironic从Ocata版本开始支持的新特性,通过network-generic-switch插件控制交换机,Ironic可以实现在不同租户间机网络隔 ...

  9. rpm软件包管理的详细解读

    CentOS系统上使用rpm命令管理程序包:安装.卸载.升级.查询.校验.数据库维护 1.基本安装 rpm -ivh PackageFile 2.rpm选项 rpm -ivh --test Packa ...

  10. css入门二-常用样式

    css入门二-常用样式总结 基本标签样式 背景色background-color 高度height; 宽度width; 边框对齐以及详细设定举例 width/*宽度*/: 80%; height/*高 ...