2011-06-10 36 views
7

Hay un archivo de texto que he creado en la carpeta raíz de mi proyecto. Ahora, estoy intentando usar el método Process.Start() para lanzar externamente ese archivo de texto.Abrir un archivo de texto con WPF

El problema que tengo aquí es que la ruta del archivo es incorrecta y Process.Start() no puede encontrar este archivo de texto. Mi código es el siguiente:

Process.Start("Textfile.txt"); 

Entonces, ¿cómo debo hacer una referencia correcta a ese archivo de texto? ¿Puedo usar la ruta relativa en lugar de la ruta absoluta? Gracias.

Edit: Si cambio el código anterior a este, ¿funcionaría?

string path = Assembly.GetExecutingAssembly().Location; 
Process.Start(path + "/ReadMe.txt"); 
+0

Debe asegurarse de que el archivo está copiado, no puede usar 'Process.Start' para los recursos incrustados. Compruebe las propiedades y establezca el atributo 'Copiar al directorio de salida', respectivamente. –

Respuesta

12

Windows necesita saber dónde se encuentra el archivo, por lo que necesita de alguna manera especifica que:

ya sea utilizando la ruta absoluta:

Process.Start("C:\\1.txt"); 

O ajuste directorio actual:

Environment.CurrentDirectory = "C:\\"; 
Process.Start("1.txt"); 

Normalmente CurrentDirectory se establece en la ubicación del archivo ejecutable.

[Editar]

Si el archivo está en el mismo directorio en el ejecutable es que puede utilizar el código como el siguiente:

var directory = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location); 
var file = Path.Combine(directory, "1.txt"); 
Process.Start(file); 
+0

si hago esto, ¿funcionaría? string path = Assembly.GetExecutingAssembly(). Ubicación; Process.Start (ruta + "/ReadMe.txt"); – woodykiddy

+0

Si el archivo está en el mismo directorio que el ejecutable, entonces sí. Sin embargo, es mejor utilizar Path.Combine en lugar de concatenación de cadenas. Además 'Location' tendrá el nombre del archivo dentro. Necesita obtener solo el directorio. –

+0

@woodykiddy - actualizó la respuesta. –

1

Deberá conocer el directorio actual si desea utilizar una ruta relativa.

System.Envrionment.CurrentDirectory 

Se podría añadir que a su ruta con la trayectoria

System.IO.Path.Combine(System.Envrionment.CurrentDirectory, "Textfile.txt") 
+0

'Process.Start' puede abrir prácticamente cualquier cosa, intenta usar la aplicación asociada al archivo. –

+0

Ah. Ahora me siento stoopid;) –

+0

Si 'ProcessStartInfo.UseShellExecute' es verdadero, que es el predeterminado. –

2

La forma en que están haciendo esto está muy bien. Esto encontrará el archivo de texto que está en el mismo directorio que su exe y lo abrirá con la aplicación predeterminada (probablemente notepad.exe). Aquí hay más ejemplos de cómo hacer esto:

http://www.dotnetperls.com/process-start

Sin embargo, si usted quiere poner un camino en, usted tiene que utilizar la ruta completa.Usted puede construir la ruta completa, mientras que sólo preocuparse por la ruta relativa utilizando el método que figura en este post:

http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/e763ae8c-1284-43fe-9e55-4b36f8780f1c

se vería algo como esto:

string pathPrefix; 

if(System.Diagnostics.Debugger.IsAttached()) 
{ 
    pathPrefix = System.IO.Path.GetFullPath(Application.StartupPath + "\..\..\resources\"); 
} 
else 
{ 
    pathPrefix = Application.StartupPath + "\resources\"; 
} 

Process.Start(pathPrefix + "Textfile.txt"); 

Esto es para abrir un archivo en una carpeta que agrega a su proyecto llamada recursos. Si lo quiere en la raíz de su proyecto, simplemente deje la carpeta de recursos en las dos cadenas anteriores y estará listo.

0

en una máquina Windows:

libreta de inicio con la ubicación del archivo inmediatamente después de ella. WIN

Cuestiones relacionadas