Chemin de fichier comme Argument de Ligne de Commande
C'est chose de très commun, mais je suis très confus pour contourner ce problème.
Prenant le chemin d'accès au fichier comme argument de ligne de commande en c#.
Si je donne de l'entrée "F:\\", alors cela fonctionne parfaitement.
Mais quand je donne de l'entrée "F:\" il donne de sortie comme F:".
Je sais que c'est à cause de l'échappement de caractères.
Mais mon problème est de savoir comment obtenir autour de ce sans modifier la saisie de l'utilisateur parce que, logiquement, la saisie de l'utilisateur est correct.
Est-il possible sans modification de la saisie de l'utilisateur d'obtenir chemin d'accès correct dans cette situation?
Je sais aussi qu'il y a @ de caractères qui peuvent être utilisés.
Mais comme je l'ai dit c'est l'argument de ligne de commande si la chaîne est déjà dans la variable.
J'ai aussi lu quelques blogs mais je reste incapable de résoudre mon problème.
C# de Ligne de Commande de l'Analyse de Cité Chemins et en Évitant les Caractères d'Échappement
EDIT :en Fait mon programme à la liste de tous les fichiers dans le répertoire je suis donc vérifier d'abord pour le Répertoire.Existe(arguments de ligne de commande) et ensuite obtenir la liste de tous les fichiers, si le répertoire existe.
Ok, donc dans ce cas, lorsque l'utilisateur donne l'argument de ligne de Commande comme je l'ai indiqué ci-dessus, logiquement, la voiture existent, mais seulement en raison du caractère d'échappement, elle retourne false.
Pensez juste l'impression de l'argument de ligne de commande comme suit.
class Program
{
static void Main(string[] args)
{
Console.WriteLine("{0}", args[0]);
Console.Read();
}
}
Je vais avoir très peu de connaissances de c# merci pour votre aide.
Vous pouvez poster à la partie pertinente de votre code?
"Je vais avoir pas connaissance de c# merci pour votre aide." - avec cela à l'esprit, êtes-vous sûr que vous êtes dans la bonne position pour travailler sur un programme plutôt que de lire des tutoriels et de programmation de l'enseignement de livres?
Malgré cela, comme les autres ont dit, vous aurez besoin de nous montrer le code où il s'agit d'un problème. Généralement, l'utilisateur chaînes ne comportent pas de caractères d'échappement; c'est juste leur représentation lors de l'écriture vers le bas à l'intérieur du code source C#. En particulier, je ne suis pas sûr de ce genre d'opération est décrite par la "quand je donne de l'entrée" - êtes-vous l'invocation d'une application à partir de C#, le passage des chaînes comme arguments de ligne de commande pour que d'autres applications?
Veuillez ne pas inclure de l'information sur un langage utilisé dans une question de propriété, à moins que ça n'aurait pas de sens sans elle. Tags servir à cette fin.
OriginalL'auteur Nirav Kamani | 2014-03-09
Vous devez vous connecter pour publier un commentaire.
Je ne sais pas pourquoi votre avoir un problème ici. En M$ Windows, un répertoire peut être spécifié avec ou sans barre oblique inverse donc, toutes ces sont corrects:
c:
etc:\
etc:\media
etc:\media\
. C'est la même chose pourDirectory.Exists(path)
et d'autres fonctions comme leDirectory.GetFiles(path)
.Sat suivante est très simple d'application à la liste des fichiers de répertoire et dans mon environnement, il fonctionne indépendamment de si j'ai mis un slash à la fin. Donc
c:\media\
me donne tous mes fichiers multimédias.Une chose à noter est que, dans visual studio, lors de l'utilisation du débogueur comme Rapide Regarder, il montre le caractère d'échappement avec les barres obliques inverses. Donc, si l'utilisateur entre
c:\media\
la chaîne sera stocké commec:\media\
mais quand vous rapide regarder le chemin de VS, vous verrezc:\\media\\
; regarder plus en profondeur avec le Texte de Visualisation en fonction de vous et vous verrez correctement le chemin d'accès indiqué quec:\media\
.Et avec tout en ligne de commande applications dans Windows entrée doivent être entourées de guillemets. Donc, si vous voulez faire un appel comme ce
listdir.exe "c:\my media"
oulistdir.exe "c:\my media\"
. Vous verrez que le c# console application va l'interpréter correctement et de mettre le c:\my les médias dans votre variable path.Il suffit de considérer le deuxième cas, dans ce cas, votre imprimer ligne imprimer c:\my les médias". et le Répertoire.Existent() retournera false, même aussi le répertoire existe pas seulement en raison de guillemets à la fin.
Je vois, les problèmes de juste cliqué 🙂 Alors, pourquoi ne pouvez-vous pas de la garniture de la citation? par exemple
string path = args[0].TrimEnd('"');
Toute autre solution? C'est un travail, mais est-il possible sans modification de la saisie de l'utilisateur?
OriginalL'auteur Chris Moutray
Vous devez utiliser
Path
classe et plus précisémentPath.GetFullPath
méthode pour obtenir de bons chemin d'accès complet.UPD. Chemins avec espaces doivent être transmis dans les citations. Ou vous devriez concat tous vos arguments de ligne de commande, si un chemin est la seule entrée.
mise à jour de ma réponse
OriginalL'auteur Redwan
Utilisation
Environment.GetCommandLineArgs()
. Il permet de nettoyer le chemin.Voir ce lien pour plus d'info: http://msdn.microsoft.com/en-us/library/system.environment.getcommandlineargs(v=vs. 110).aspx
OriginalL'auteur Ernesto Herrera
Bien, si je comprends bien. Vous pouvez utiliser chaîne de caractères.Format . Il y a une surcharge de méthodes qui pourraient vous aider sans modifier beaucoup la saisie de l'utilisateur.
Exemple de code:
OriginalL'auteur cat_minhv0
C# interprète \, comme un caractère d'échappement. Ainsi \" est interprété comme"
Façon Possible de le réparer (si vous êtes sûr qu'il n'y a pas de " à l'intérieur d'arguments:
Une autre manière: vous pouvez définir les paramètres de ligne de commande sans les guillemets.
OriginalL'auteur Dmitriy Finozhenok