2016-03-27 5 views
0

Ich habe eine C# -GUI, die es einem Benutzer erlaubt, eine Datei auszuwählen und diese dann gegen objdump auszuführen und den Inhalt an die GUI auszugeben.Dateipfade können nicht als Befehlszeilenargument übergeben werden, wenn Pfad Leerzeichen enthält?

Ich habe jedoch Probleme, wenn der Benutzer eine Datei auswählt, in der der Pfad Leerzeichen enthält, verursacht es die Ausführung der Befehlszeile zu unterbrechen.

Ich habe mich in Stackoverflow umgesehen und es scheinen all diese Hacks für Windows Scripting zu sein, weil Pfade mit Leerzeichen nicht einfach zu lösen sind. Da ich den Dateinamen jedoch programmatisch übergebe, kann ich das nicht/gibt es einen einfacheren Weg?

Dies ist mein Code:

private void button1_Click(object sender, EventArgs e) 
{ 

    DialogResult result = openFileDialog1.ShowDialog(); 
    if (result == DialogResult.OK){ 
     dataGridView1.Rows.Clear(); 
     dataGridView1.Refresh(); 

     string filename = openFileDialog1.FileName;   //May contain spaces 
     try 
      { 
       var proc = new Process 
       { 
        StartInfo = new ProcessStartInfo 
        { 
         FileName = "dumpbin.exe", 
         Arguments = "/DISASM " + filename, // Causing this to fail 
         UseShellExecute = false, 
         RedirectStandardOutput = true, 
         CreateNoWindow = true 
        } 
       }; 

       proc.Start(); 

Antwort

2

Sie müssen die Dateinamen mit doppelten Anführungszeichen wickeln, wie gewohnt von der Kommandozeile.

Try this:

Arguments = "/DISASM \"" + filename + "\"", 
0

Versuchen Anführungszeichen zu setzen um den Weg

pSInfo.Argument = @"""c:\test cases\testfile.csv"""; 

oder wenn Sie es vorziehen

pSInfo.Argument = "\"c:\\test cases\\testfile.csv\""; 
0

Verwenden Anführungszeichen um den filename:

Arguments = $"/DISASM \"{filename}\"",