2010-12-14 95 views
7

Le programme créé utilise un outil tiers pour générer un fichier journal. Cependant, les arguments fournis pour l'outil nécessitent divers fichiers provenant d'emplacements de répertoire dans le cadre de la génération des journaux. Par conséquent, l'argument principal de @"-r C:\test\ftk\ntuser.dat -d C:\System Volume Information\" + restoreFolder.Name + " -p runmru"; serait utilisé pour générer les journaux.C# Comment utiliser Directory White Spaces dans process.arguements?

Quelqu'un peut-il conseiller sur la façon de faire en sorte que les arguments de "C: \ System Volume Information \" soient traités par le système avec les espaces blancs en place? Merci!

Les codes:

  Process process = new Process(); 
      process.StartInfo.FileName = @"C:\test\ftk\ripxp\ripxp.exe"; 
      process.StartInfo.Arguments = @"-r C:\test\ftk\ntuser.dat -d C:\System Volume Information\" + restoreFolder.Name + " -p runmru"; 
      process.StartInfo.CreateNoWindow = false; 
      process.StartInfo.UseShellExecute = false; 
      process.StartInfo.RedirectStandardOutput = true; 
      process.StartInfo.RedirectStandardInput = true; 
      process.StartInfo.RedirectStandardError = true; 
      process.Start(); 

Répondre

10

Vous devez échapper à la " en ajoutant un \ les (\") - pour les chaînes normales, ou les doubler ("") pour cordes verbatim littérales (ceux commençant par @) :

process.StartInfo.Arguments = @"-r C:\test\ftk\ntuser.dat -d ""C:\System Volume Information\" + restoreFolder.Name + @""" -p runmru"; 
+0

Le restoreFolder.Name est un nom de système que je penseur peut-être vous avez placé un supplément "ou \ dans la mauvaise région? Même les codes ci-dessus montrent déjà des erreurs. – JavaNoob

+0

@JavaNoob - informations supplémentaires et exemple corrigé. – Oded

+0

Vous avez la même erreur que De ... – JavaNoob

1

peut-être

process.StartInfo.Arguments = @"-r C:\test\ftk\ntuser.dat -d C:\System Volume Information\" + restoreFolder.Name + " -p runmru"; 

devrait être

process.StartInfo.Arguments = @"-r ""C:\test\ftk\ntuser.dat"" -d ""C:\System Volume Information\""" + restoreFolder.Name + " -p runmru"; 
+0

Reps pour la réponse, mais essayez de ne pas utiliser trop de "" cause sa confusion. – JavaNoob

2

WRAP chemin entre guillemets:

process.StartInfo.Arguments = @"-r C:\test\ftk\ntuser.dat -d ""C:\System Volume Information\" + restoreFolder.Name + @""" -p runmru"; 
+0

Le système montre qu'il y a un "" près du triple "" fermé. – JavaNoob

+0

Code corrigé! – decyclone

+0

Reçoit pour la réponse aussi! – JavaNoob

0

Si je comprends bien la question, vous pouvez envelopper le nom avec des guillemets:

"... \"C:\System Volume Information\" + restoreFolder.Name + "\"..." 
0

Vous avez vraiment besoin d'utiliser une chaîne.Format avec la classe Path:

process.StartInfo.Arguments = @"-r C:\test\ftk\ntuser.dat -d C:\System Volume Information\" + restoreFolder.Name + " -p runmru" 

peut être réécrite pour être beaucoup plus propre comme suit:

string ntuser = @"C:\test\ftk\ntuser.dat"; 
var args = Path.Combine(@"C:\System Volume Information\", "restoreFolder.Name"); 

var outs = string.Format("-r {0} -d {1} -p runmru", ntuser, args); 
outs.Dump();