2010-12-14 14 views
7

El programa creado utiliza una herramienta de terceros para generar un archivo de registro.C# ¿Cómo usar los espacios blancos del directorio en process.arguements?

Sin embargo, los argumentos provistos para la herramienta requieren varios archivos de las ubicaciones del directorio como parte de la generación de los registros. Por lo tanto, el argumento principal de @"-r C:\test\ftk\ntuser.dat -d C:\System Volume Information\" + restoreFolder.Name + " -p runmru"; se usaría para generar los registros.

¿Puede alguien asesorar sobre cómo hacer que los argumentos de "C: \ System Volume Information \" sean procesados ​​por el sistema con los espacios en blanco colocados? ¡Gracias!

Los códigos:

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

Respuesta

10

tiene que escapar del " añadiendo un \ a ellos (\") - para las cadenas normales, o duplicarlas ("") para los literales de cadena literales (los que empiezan con @) :

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

El restoreFolder.Name es un nombre de sistema que quizás pensador ha colocado un extra "o \ en el área equivocada? incluso los códigos anteriores ya muestran errores. – JavaNoob

+0

@JavaNoob - información adicional y ejemplo corregido. – Oded

+0

Tiene el mismo error que De ... – JavaNoob

1

Quizás

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

debería ser

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

Representa la respuesta, pero trate de no usar demasiado "" porque es confuso. – JavaNoob

2

envuelva a ese camino entre comillas dobles:

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

El sistema muestra que hay un "casi el triple" no cerrado. – JavaNoob

+0

¡Código corregido! – decyclone

+0

¡Los representantes también responden! – JavaNoob

0

Si bien entendía la pregunta, se puede envolver el nombre entre comillas:

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

Realmente necesita utilizar una cadena.Formato junto con la clase de ruta:

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

puede reescribirse a ser mucho más limpia de la siguiente manera:

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