我正在我的计算机上注册一个自定义协议(protocol)处理程序,它调用这个应用程序:
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("/", "")
,但斜杠仍然存在。发生了什么事?
最佳答案
您需要分配 TrimEnd 的结果:
key = key.TrimEnd('/');
C# 中的字符串是 immutable ;因此,改变字符串的字符串方法会返回一个带有改变的新字符串,而不是改变原始字符串。
关于c# - 在参数中添加尾部斜杠 (/),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11971904/