2010-02-05 3 views
1

J'utilise System.Diagnostics.Process.Start(). Par exemple:Process.Start Argument Problème --- Echappement d'un caractère "="?

string target = @"c:\te=mp\test"; 
System.Diagnostics.Process.Start("explorer.exe", target) 

La variable cible est en fait plus dynamique fourni et fait à l'occasion comprennent un signe « = » qui est un caractère juridique dans les noms de fichiers et des répertoires.

Le problème est que cela déclenche une erreur indiquant, "Le chemin 'mp \ test' n'existe pas ou n'est pas un répertoire." Il semble que l'argument path soit coupé à gauche du caractère "=".

Existe-t-il un moyen d'échapper le caractère "=" sinon contourner ce problème?

Répondre

3

essayez d'emballage entre guillemets, par exemple

string target = @"""c:\te=mp\test"""; 
+0

A travaillé un charme. –

+0

Donc, cela a accompli l'objectif. Pouvez-vous me dire pourquoi, exactement? –

+0

Parfois, les arguments passés à un processus via la ligne de commande sont analysés pour la structure, par ex. a = b peut être interprété comme 'le paramètre a la valeur b'. En enveloppant l'argument entre guillemets, vous indiquez explicitement que la valeur doit être utilisée comme une chaîne littérale. –

1

Il suffit d'utiliser des guillemets doubles:

System.Diagnostics.Process.Start("explorer.exe", @"""c:\te=mp\test"""); 
2

Mettez des guillemets autour du paramètre incriminé. Par exemple:

System.Diagnostics.Process.Start("explorer.exe", "\"" + target + "\""); 
+0

Merci. Cette syntaxe est nouvelle pour moi. Pourquoi cela fonctionne-t-il? –

+0

@JR - Le code ajoute une citation au début et à la fin du paramètre cible. Les guillemets sont échappés en utilisant des blackslashes. '" \ "" == @ "" "" '. – Greg