Завершающий слеш (/) добавлен в аргументы

Я регистрирую собственный обработчик протокола на моем компьютере, который вызывает это приложение:

        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# являются неизменяемыми; поэтому строковые методы, которые изменяют строку, возвращают новую строку с изменениями, а не изменяют исходную строку.

Другие вопросы по тегам