日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#的命令行参数

發布時間:2024/1/17 C# 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#的命令行参数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

????? 這一周嘗試著用C#寫了兩個后臺程序,主程序用CreateProcess()傳遞命令行參數并創建進程。在實現的過程中,碰到了一個問題,命令行參數中如果帶有空格該如何處理。一直認為,命令行中的空格用作參數的分隔符。如果參數內部有空格,該怎么辦呢?譬如命令行的參數為“祝福 張學友?\Program Files\1 2 3.lrc”。

????? 剛開始寫后臺程序時,沒考慮到這個問題。后來ZWF在使用時問起,才注意到。經過商量,決定自己定義一個命令行格式,用|作為分隔符。將“祝福 張學友 \Program Files\1 2 3.lrc”改為“祝福|張學友|\Program Files\1 2 3.lrc”。在后臺程序中,首先將所有的參數合并,然后再通過分隔符|解析各個字段,代碼如下:

using?System;
using?System.Collections.Generic;
using?System.Text;
using?System.Windows.Forms;

namespace?ConsoleApplication1
{
????
class?Program
????{
????????
static?void?Main(string[]?args)
????????{
????????????String?temp?
=?"";
????????????
string?song,?singer,?path;
????????????
int?head,?tail;
????????????
//?合并命令行參數
????????????for?(int?i?=?0;?i?<?args.Length;?i++)
????????????{
????????????????MessageBox.Show(args[i]);
????????????????temp?
+=?args[i];
????????????????temp?
+=?"?";
????????????}
????????????MessageBox.Show(temp);
????????????
try
????????????{
????????????????
//?解析合并后的命令行
????????????????head?=?temp.IndexOf('|',?0);
????????????????song?
=?temp.Substring(0,?head);
????????????????MessageBox.Show(song);
????????????????head?
+=?1;
????????????????tail?
=?temp.IndexOf('|',?head);
????????????????singer?
=?temp.Substring(head,?tail?-?head);
????????????????MessageBox.Show(singer);
????????????????path?
=?temp.Substring(tail?+?1);
????????????????MessageBox.Show(path);
????????????}
????????????
catch{}
????????}
????}
}

?????? 主程序是用C++寫的,代碼如下:

int?_tmain(int?argc,?_TCHAR*?argv[])
{
????TCHAR?szCMD[MAX_PATH];
????PROCESS_INFORMATION?pi;
????STARTUPINFO?sii;

????memset(
&sii,?0,?sizeof(sii));
????sii.cb?
=?sizeof(sii);
????sii.wShowWindow?
=?SW_SHOW;
????sii.dwFlags?
=?STARTF_USESHOWWINDOW;

????
//?自定義格式的命令行參數
????wcscpy(szCMD,?L"?祝福|張學友|\\Program?Files\\1?2?3.lrc");
????
//?使用系統支持的命令行參數
????
//wcscpy(szCMD,L"?祝福?張學友?\"\\Program?Files\\1?2?3.lrc\"");

????CreateProcess(_T(
".\\ConsoleApplication1.exe"),?szCMD,
????????NULL,?NULL,?
0,?0,?NULL,?NULL,?&sii,?&pi);

????
return?0;
}

?????? 注意,wcscpy(szCMD, L" 祝福|張學友|\\Program Files\\1 2 3.lrc");中祝福前必須留一個空格,否則會導致后臺程序接收的命令行不完整。關于這一點,請參考《C++和C#程序之間命令行參數傳遞和接收》,博主整理的非常細致。MSDN中有關C#命令行參數的說明,Main() 和命令行參數(C# 編程指南),其中提到了“與 C 和 C++ 不同,C#程序的名稱不會被當作第一個命令行參數”。

????? 雖然通過自定義命令行的方式,解決了命令行參數本身帶有空格的問題,但總感覺有點怪。這是參數不多,如果參數多了怎么辦?按理來說,命令行參數的解析規則不能這么簡單。在MSDN中查了一下,有其具體的解析規則Parsing C Command-Line Arguments。其中第一個示例就是解決命令行參數中帶有空格的問題,只要將該參數放在一對雙引號內就可以了。所以,將“祝福 張學友 \Program Files\1 2 3.lrc”改成“ 祝福 張學友 \"\Program Files\1 2 3.lrc\"”即可。通過實驗證明,這種方法可行,且簡單方便。

總結

以上是生活随笔為你收集整理的C#的命令行参数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。