public static void launchProcess(ssortingng processName, ssortingng arguments, out ssortingng output) { Process p = new Process { StartInfo = { UseShellExecute = false, RedirectStandardOutput = true, FileName = processName, Arguments = arguments } }; p.Start(); output = p.StandardOutput.ReadToEnd(); p.WaitForExit(); }
Et si mes arguments contiennent les noms de fichier suivants:
D:\Visual Studio Projects\ProjectOnTFS\ProjectOnTFS
Alors j’obtiens l’erreur:
Il aura besoin de guillemets doubles, mais il faudra probablement aussi un @ pour traiter la chaîne mot à mot ( chaîne in extenso ), c’est-à-dire que le “\” a une signification spéciale dans la chaîne; par exemple, \ t signifie un onglet, nous voulons donc ignorer la \
Donc, non seulement les guillemets doubles, mais aussi @
ssortingng myArgument = @"D:\Visual Studio Projects\ProjectOnTFS\ProjectOnTFS";
J’utilise les éléments suivants dans la plupart de mes applications (si nécessaire) pour append des guillemets au début et à la fin d’une chaîne s’il y a des espaces.
public ssortingng AddQuotesIfRequired(ssortingng path) { return !ssortingng.IsNullOrEmpty(path) ? path.Contains(" ") ? "\"" + path + "\"" : path : ssortingng.Empty; }
EDIT Selon la suggestion, a changé le nom de la fonction et ajouté une vérification de référence nulle.
Exemples..
AddQuotesIfRequired(@"D:\Visual Studio Projects\ProjectOnTFS\ProjectOnTFS");
Renvoie "D:\Visual Studio Projects\ProjectOnTFS\ProjectOnTFS"
AddQuotesIfRequired(@"C:\Temp");
Renvoie C:\Temp
AddQuotesIfRequired(null);
Renvoie une chaîne vide
Je réalise que c’est un vieux fil, mais pour les personnes qui voient cela après moi, vous pouvez également le faire:
ssortingng myArgument="D:\\Visual Studio Projects\\ProjectOnTFS\\ProjectOnTFS"
En évitant les barres obliques, vous n’avez pas à utiliser le symbole @. Juste une autre alternative.