VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > c#教程 >
  • C#教程之C#教程之C# 程序之间传参数,Args 接收参数的处理

本站最新发布   C#从入门到精通
试听地址  
https://www.xin3721.com/eschool/CSharpxin3721/

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

  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>0) //打印出参数
            {
                foreach ( var item in args )
                {
                    Console.WriteLine (item );
                }
            }
            if(File.Exists(args[1])) 
            {
                System.Diagnostics.Process.Start ( args[1]);
            }

            string s=Console.ReadLine ( );
        }
    }
}
复制代码

结果:

相关教程