Завершающий слеш (/) добавлен в аргументы
Я регистрирую собственный обработчик протокола на моем компьютере, который вызывает это приложение:
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("/", "")
, но слеш остается. Что происходит?
1 ответ
Вам нужно назначить результат TrimEnd:
key = key.TrimEnd('/');
Строки в C# являются неизменяемыми; поэтому строковые методы, которые изменяют строку, возвращают новую строку с изменениями, а не изменяют исходную строку.