Как обрабатывать пробелы в пути к файлу, если папка содержит пространство? - PullRequest
6 голосов
/ 29 июня 2011
public static void launchProcess(string processName, string arguments, out string output)
{
    Process p = new Process
    {
        StartInfo = { UseShellExecute = false, RedirectStandardOutput = true, FileName = processName, Arguments = arguments }
    };

    p.Start();
    output = p.StandardOutput.ReadToEnd();
    p.WaitForExit();

}

И если мои аргументы содержат имена файлов вроде:

D:\Visual Studio Projects\ProjectOnTFS\ProjectOnTFS

Тогда я получаю ошибку:

Ответы [ 3 ]

11 голосов
/ 29 июня 2011

Потребуются двойные кавычки, но также, вероятно, потребуется @ для обработки строки слово в слово ( дословная строка ), т. Е. «\» Имеет специальное значение в строке, например, \ tозначает вкладку, поэтому мы хотим игнорировать \

То есть не только двойные кавычки, но и @

string myArgument = @"D:\Visual Studio Projects\ProjectOnTFS\ProjectOnTFS";
5 голосов
/ 02 декабря 2015

Я использую следующее в большинстве своих приложений (если требуется), чтобы добавить двойные кавычки в начале и конце строки, если есть пробелы.

public string AddQuotesIfRequired(string path)
{
    return !string.IsNullOrWhiteSpace(path) ? 
        path.Contains(" ") && (!path.StartsWith("\"") && !path.EndsWith("\"")) ? 
            "\"" + path + "\"" : path : 
            string.Empty;
}

Примеры ..

AddQuotesIfRequired(@"D:\Visual Studio Projects\ProjectOnTFS\ProjectOnTFS");

Возвращает "D:\Visual Studio Projects\ProjectOnTFS\ProjectOnTFS"

AddQuotesIfRequired(@"C:\Test");

Возвращает C:\Test

AddQuotesIfRequired(@"""C:\Test Test\Wrap""");

Возвращает "C:\Test Test\Wrap"

AddQuotesIfRequired(" ");

Возвращает пустую строку

AddQuotesIfRequired(null);

Возвращает пустую строку

РЕДАКТИРОВАТЬ

Согласно предложению, изменили имя функции, а также добавили проверку нулевой ссылки.

Добавлена ​​проверка, чтобы увидеть, существуют ли двойные кавычки в начале и конце строки, чтобы не дублировать.

Изменена функция проверки строки на IsNullOrWhiteSpace для проверки пробелов, а также пустых или нулевых значений, которые в таком случае будут возвращать пустую строку.

2 голосов
/ 22 июля 2014

Я понимаю, что это старая ветка, но для людей, которые видят это после меня, вы также можете сделать:

string myArgument="D:\\Visual Studio Projects\\ProjectOnTFS\\ProjectOnTFS"

Избегая обратной косой черты, вам не нужно использовать символ @. Просто другая альтернатива.

...