Comment est-il possible d'analyser les arguments de ligne de commande devant être interprétés comme des chemins? args [] contient des chaînes qui sont automatiquement jointes si elles sont cotées, par exemple:C# Analyse en ligne de commande des chemins cités et évitement des caractères d'échappement
exemple.exe un deux "trois quatre"
args[0] = one
args[1] = two
args[2] = three four
Cependant, args [] ne parse propriété « C: \ Exemple \ "comme argument. Plutôt, il fournira l'argument comme "C: \ Example" "(avec la citation supplémentaire incluse.) Cela est dû à la barre oblique inverse dans le chemin étant traitée comme un caractère d'échappement et donc la citation de fin que l'utilisateur a fourni sur la commande -ligne devient une partie de l'argument
.eg.
un exemple.exe "C: \ InputFolder" "C: \ OutuptFolder \"
args[0] = one
args[1] = C:\InputFolder"
args[2] = C:\OutputFolder"
une bidouille facile pourrait être:
_path = args[i].Replace("\"", @"\");
Cependant, je suis sûr qu'il existe une meilleure pratique pour cela. Comment peut-on correctement analyser une ligne de commande qui inclut des chemins, empêchant le tableau args [] d'être incorrectement peuplé avec des piqûres qui ont été analysées pour les caractères d'échappement?
REMARQUE: Je ne souhaite pas inclure une bibliothèque complète d'analyse en ligne de commande dans mon projet! Je n'ai besoin que de gérer des chemins cités et je souhaite le faire de manière "manuelle". Veuillez ne pas recommander NConsoler, Mono ou toute autre grande bibliothèque d'analyse de ligne de commande "sink".
AUSSI NOTE: Pour autant que je peux dire, ce n'est pas une question en double. Alors que d'autres questions se concentrent sur l'analyse syntaxique en ligne de commande générique, cette question est spécifique au problème que les chemins introduisent lorsque des parties de ceux-ci sont interprétées comme des séquences d'échappement.
Où exactement voyez-vous ce caractère supplémentaire? J'utilise un compilateur d'extraits. Voici la principale .. chaîne s = args [0]; \t \t Console.WriteLine (s); Et cela fonctionne comme il se doit. – shahkalpesh
@shahkalpesh: Ne parlez pas de votre compilateur de snippets, mais essayez de l'exécuter depuis la ligne de commande, et fournissez votre programme avec un argument se terminant par \ "(backslash-doublequote) Comme l'a dit ebwi, j'ai ouvert les yeux –
Désolé, je n'ai pas bien compris l'argument d'entrée – shahkalpesh