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

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

結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM