Проблема с пробелами в filepath - выполнение командной строки в C # - PullRequest
3 голосов
/ 15 ноября 2010

Я создаю графический интерфейс для программы командной строки. В txtBoxUrls [TextBox] пути к файлам вводятся построчно. Если путь к файлу содержит пробелы , программа работает неправильно. Программа приведена ниже.

string[] urls = txtBoxUrls.Text.ToString().Split(new char[] { '\n', '\r' });

string s1;
string text;
foreach (string s in urls)
{
    if (s.Contains(" "))
    {
        s1 = @"""" + s + @"""";
        text += s1 + " ";
    }
    else
    {
        text += s + " ";
    }
}


System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo.CreateNoWindow = true;


proc.StartInfo.FileName = @"wk.exe";


proc.StartInfo.Arguments = text + " " + txtFileName.Text;

proc.StartInfo.UseShellExecute = false;


proc.StartInfo.RedirectStandardOutput = true;


proc.Start();

//Get program output
string strOutput = proc.StandardOutput.ReadToEnd();

//Wait for process to finish
proc.WaitForExit();

Например, если путь к файлу, введенный в txtBoxUrls, является «C: \ VS2008 \ Projects \ web2pdf \ web2pdf \ bin \ Release \ Test Page.htm», программа не будет работать. Этот путь к файлу с двойными кавычками будет хорошо работать в командной строке Windows (я не использую графический интерфейс). Каково было бы решение.

Ответы [ 3 ]

10 голосов
/ 15 ноября 2010
proc.StartInfo.Arguments = text + " " + txtBoxUrls.Text + " " + txtFileName.Text; 

В этой строке text уже содержит правильно указанную версию ваших строк txtBoxUrls. Почему вы добавляете их снова в кавычках (+ txtBoxUrls.Text)? Если я правильно понял ваш код, должно работать следующее:

proc.StartInfo.Arguments = text + " " + txtFileName.Text;    

На самом деле, поскольку txtFileName.Text, возможно, может содержать пробелы, вы должны также указать его, просто чтобы быть уверенным:

proc.StartInfo.Arguments = text + " \"" + txtFileName.Text + "\"";    

(или, используя ваш синтаксис:)

proc.StartInfo.Arguments = text + @" """ + txtFileName.Text + @"""";    
2 голосов
/ 15 ноября 2010

Обычно, чтобы обойти пробелы в именах файлов, вам нужно заключить аргумент в двойные кавычки. Если вы пропустите кавычки, программа подумает, что у нее есть два аргумента. Как то так ...

wk.exe "C:\VS2008\Projects\web2pdf\web2pdf\bin\Release\Test Page.htm"

Кроме того, в этой строке слишком много цитат. Четыре вместо трех:

s1 = @"""" + s + @"""";
0 голосов
/ 15 ноября 2010

Посмотрите на класс Path - http://msdn.microsoft.com/en-us/library/system.io.path.aspx

Path.combine может быть тем, что вы ищете.

...