2012-08-15 138 views
3

我在我的電腦,調用該應用程序上註冊自定義協議處理程序被添加:尾隨斜槓(/)在參數

 string prefix = "runapp://"; 

     // The name of this app for user messages 
     string title = "RunApp URL Protocol Handler"; 

     // Verify the command line arguments 
     if (args.Length == 0 || !args[0].StartsWith(prefix)) 
     { 
      MessageBox.Show("Syntax:\nrunapp://<key>", title); return; 
     } 

     string key = args[0].Remove(0, "runapp://".Length); 
     key.TrimEnd('/'); 

     string application = ""; 
     string parameters = ""; 
     string applicationDirectory = ""; 

     if (key.Contains("~")) 
     { 
      application = key.Split('~')[0]; 
      parameters = key.Split('~')[1]; 
     } 
     else 
     { 
      application = key; 
     } 


     applicationDirectory = Directory.GetParent(application).FullName; 

     ProcessStartInfo psInfo = new ProcessStartInfo(); 
     psInfo.Arguments = parameters; 
     psInfo.FileName = application; 

     MessageBox.Show(key + Environment.NewLine + Environment.NewLine + application + " " + parameters); 
     // Start the application 
     Process.Start(psInfo); 

它所做的是,它檢索runapp://請求,根據'〜'字符的位置將它分爲兩​​部分:應用程序和傳遞的參數。 (如果我曾經通過PROGRA〜1或某些東西,但這可能不是一個好主意,但考慮到我是唯一使用它的人,這不是問題),然後運行它。

然而,一個尾隨 '/' 總是被添加到字符串:如果我通過

runapp://E:\Emulation\GameBoy\visualboyadvance.exe~E:\Emulation\GameBoy\zelda4.gbc,它將被解釋爲

runapp://E:\Emulation\GameBoy\visualboyadvance.exe E:\Emulation\GameBoy\zelda4.gbc/

爲什麼要這樣做?爲什麼我不能擺脫這個尾隨的斜線?我試過TrimEnd('/'),Remove(key.IndexOf('/'), 1),Replace("/", ""),但斜線停留。發生什麼事 ?

+0

作爲一個側面評論,你有沒有考慮過使用?作爲應用程序/參數分隔符?這適合於通用的URL語法在哪裏?用於從參數中分離路徑。這將允許您將URL加載到Url類併爲您解析,包括不必像在這裏那樣進行手動字符串操作。 – 2012-08-15 15:38:51

回答

5

您需要分配TrimEnd的結果是:在C#

key = key.TrimEnd('/'); 

字符串是immutable;因此,更改字符串的字符串方法會返回一個新字符串,而不會更改原始字符串。

+0

哦,愚蠢。我總是忘記刪除,替換和修剪不會對字符串起作用。 – pikzen 2012-08-15 15:17:41