C# de Ligne de Commande de l'Analyse de Cité Chemins et en Évitant les Caractères d'Échappement
Comment est-il possible d'analyser les arguments de ligne de commande qui doivent être interprétés comme des chemins? args[] contient les chaînes sont automatiquement joint si elles sont citées, par exemple:
example.exe l'un deux trois quatre"
args[0] = one
args[1] = two
args[2] = three four
Cependant, args[] ne sera pas bien analyser "C:\Example\" comme argument. Plutôt, elle fournira à l'argument de la "C:\Example"" (avec le supplément de devis inclus). Cela est dû à la barre oblique inverse dans le chemin d'être traité comme un caractère d'échappement et donc la fin de la citation que l'utilisateur a fourni sur la ligne de commande devient une partie de l'argument.
.e.g:
example.exe un "C:\InputFolder" "C:\OutuptFolder\"
args[0] = one
args[1] = C:\InputFolder"
args[2] = C:\OutputFolder"
Facile quelque chose peut-être:
_path = args[i].Replace("\"", @"\");
Cependant, je suis sûr qu'il y est une bonne pratique pour cela. Comment peut-on analyser correctement une ligne de commande qui comprend chemins d'accès, la prévention de la args[] tableau de mal avoir rempli avec des piqûres qui ont été analysées pour les caractères d'échappement?
NOTE: je ne voudrais pas d'inclure toute une ligne de commande d'analyse de la bibliothèque dans mon projet! J'ai besoin seulement de gérer cité chemins et qui souhaitent le faire dans un "manuel" de la mode. S'il vous plaît ne recommande pas NConsoler, Mono, ou tout autre grand "évier de cuisine de ligne de commande" analyse de la bibliothèque.
ÉGALEMENT NOTE: pour autant Que je peux dire, ce n'est pas une double question. Alors que d'autres questions portent sur le générique de ligne de commande de l'analyse, cette question est spécifique au problème que les chemins de présenter lorsque des pièces sont interprétées comme des séquences d'échappement.
- Où êtes-vous exactement en voyant ce caractère supplémentaire? J'utilise de l'extrait de compilateur. Ici, c'est le principal.. string s=args[0]; Console.WriteLine(s); Et il fonctionne comme il se doit.
- Je ne sais pas à propos de votre extrait de compilateur, mais essayez de l'exécuter à partir de la ligne de commande, et de fournir votre programme avec un argument se terminant par \" (barre oblique inverse-apostrophe). Comme ebwi dit, a ouvert les yeux.
- Je comprends maintenant. Désolé de ne pas comprendre l'argument d'entrée correctement.
- Changer votre flux de travail à utiliser échappé barres obliques inverses pour les paramètres d'entrée sur la ligne de commande. "\\\\machine\\partage\chemin\\filename\\" comme une alternative pour éviter le problème.
Vous devez vous connecter pour publier un commentaire.
Pas une réponse, mais voici quelques contexte et explication de Jeffrey Tan, Microsoft en Ligne le Soutien de la Communauté (12/7/2006):
Fait également référence à la FX méthode De l'environnement.GetCommandLineArgs pour de plus amples explications de la barre oblique comportement de manipulation.
Personnellement, je pense que c'est une traînée, et je suis surpris, je n'ai pas été peu en avant. Ou peut-être que je ont et ne le savent pas? Aveugle de remplacement des devis avec des barres obliques ne me frappe pas comme une solution, bien qu'. Je suis à droit de vote de la question, parce que ça a été une révélation.
J'aime bien ton idée:
Il est propre, et n'aura aucun effet à moins que le problème existe.
J'ai eu la même frustration. Ma solution a été d'utiliser des expressions régulières. Mon attendus d'entrée est une liste de chemins, dont certains peuvent être cités. Au-dessus de la bidouille ne fonctionne pas à moins que tous les derniers arguments sont cités.
Peut-on voir un plus efficace regex?