2010-12-14 9 views
7

Utworzony program wykorzystuje narzędzie innej firmy do wygenerowania pliku dziennika.C# Jak używać Directory White Spaces do process.arguements?

Jednak argumenty przewidziane dla tego narzędzia wymagają różnych plików z lokalizacji katalogu w ramach generowania dzienników. Dlatego główny argument @"-r C:\test\ftk\ntuser.dat -d C:\System Volume Information\" + restoreFolder.Name + " -p runmru"; zostanie wykorzystany do wygenerowania dzienników.

Czy ktoś może doradzić, jak sprawić, by argumenty "C: \ System Volume Information \" były przetwarzane przez system z białymi znakami w umieszczonym? Dzięki!

Kody:

  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(); 

Odpowiedz

10

Musisz uciec " przez dodanie \ do nich (\") - dla normalnych strun lub podwojenie ich ("") dla pełnych napisowych (te zaczynające się @) :

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

restoreFolder.Name to nazwa systemu I myśliciel może umieściłeś dodatkowe "lub \ w niewłaściwym obszarze? nawet powyższe kody pokazują już błędy. – JavaNoob

+0

@JavaNoob - dodano informacje i poprawiono przykład. – Oded

+0

Masz ten sam błąd co De ... – JavaNoob

1

Może

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

powinny być

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

Powtarzanie odpowiedzi, ale staraj się nie używać zbyt wiele "", ponieważ powoduje to zamieszanie. – JavaNoob

2

Wrap tę ścieżkę w cudzysłowach:

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

System pokazuje, że jest zamknięty "w pobliżu potrójnego" "". – JavaNoob

+0

Kod poprawiony! – decyclone

+0

Powtórzę też za odpowiedź! – JavaNoob

0

Jeśli dobrze zrozumiałam pytanie, można owinąć nazwę cytatami:

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

Naprawdę należy użyć ciągu.Format wraz z klasą Ścieżka:

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

można przepisać się być dużo czystsze następująco:

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();