Abra un archivo con el Bloc de notas en C #

116

¿Cómo abro un archivo en c #? No me refiero a leerlo por textreader y readline (). Me refiero a abrirlo como un archivo independiente en el bloc de notas.

Mohamed
fuente
¿Desea iniciar una instancia de bloc de notas desde su programa y hacer que abra un archivo específico?
Despido
1
Nota: Cuando lo probé con .Net 2.0, Process.Startno expandí automáticamente "% windir%", aunque omitirlo como en la respuesta de viabhav o expandirlo explícitamente ( Environment.GetEnvironmentVariable("windir")) funcionó con éxito.
Brian
Puede integrar un clon del bloc de notas en su aplicación y personalizarlo para que funcione como lo desee. Escribo un clon de bloc de notas en C #, puedes encontrarlo aquí: Simplygoodcode.com/2012/04/notepad-clone-in-net-winforms.html
Luis Perez

Respuestas:

190

Necesitas System.Diagnostics.Process.Start().

El ejemplo más simple:

Process.Start("notepad.exe", fileName);

Enfoque más genérico:

Process.Start(fileName);

El segundo enfoque es probablemente una mejor práctica ya que esto hará que el shell de Windows abra su archivo con su editor asociado. Además, si el archivo especificado no tiene una asociación, usará el Open With...cuadro de diálogo de Windows.

Nota para los que están en los comentarios, gracias por sus comentarios. Mi respuesta rápida y sucia estaba un poco fuera de lugar, he actualizado la respuesta para reflejar la forma correcta.

Aren
fuente
1
Yo haría un escape si fuera tú.
Albin Sunnanbo
1
Estoy de acuerdo en que esta es una forma de hacer esto, otra forma, si quisiera abrir el documento pero no ejecutar el programa, sería usar algo como: richTextBox1.LoadFile (Program.editInC, RichTextBoxStreamType.UnicodePlainText) para cargar el contenido real en un archivo.
Jim
1
Es mejor pasar el nombre del archivo como segundo parámetro. En realidad, según la documentación , su código no debería funcionar, ya que el único parámetro de Process.Startes el documento o el nombre del archivo de la aplicación, mientras que el suyo es el nombre de la aplicación combinado con el parámetro de la línea de comandos.
Vlad
@Albin: Gracias, totalmente pasado por alto ese: p @Jim: Creo que la pregunta era cómo lanzar un editor. @Vlad: Gracias, tienes razón.
Aren
11
El uso Process.Start(filename)es una inyección de comandos potencial, mediante el cual un atacante podría sustituir MyTextFile.txtpor MyMalicious.bato fdisk .... Mejor usar Process.Start("notepad.exe", filename).
Geoff Bennett
29

No está proporcionando mucha información, pero asumiendo que desea abrir cualquier archivo en su computadora con la aplicación que se especifica para el controlador predeterminado para ese tipo de archivo, puede usar algo como esto:

var fileToOpen = "SomeFilePathHere";
var process = new Process();
process.StartInfo = new ProcessStartInfo()
{
    UseShellExecute = true,
    FileName = fileToOpen
};

process.Start();
process.WaitForExit();

El parámetro UseShellExecute le dice a Windows que use el programa predeterminado para el tipo de archivo que está abriendo.

WaitForSalir hará que su aplicación espere hasta que la aplicación que luanched se haya cerrado.

TimothyP
fuente
Y, además, sería bueno utilizar un if(File.Exists(fileToOpen))para evitar encontrarse con una excepción.
Wiccio
26

esto abrirá el archivo con el programa predeterminado de Windows (bloc de notas si no lo ha cambiado);

Process.Start(@"c:\myfile.txt")
Colin Pickard
fuente
15
System.Diagnostics.Process.Start( "notepad.exe", "text.txt");
Vaibhav
fuente
12

Puede usar Process.Start, llamando notepad.execon el archivo como parámetro.

 Process.Start(@"notepad.exe", pathToFile);
Oded
fuente
2
Por cierto,% pathVariables% no funciona con este método. Process.Start(@"%windir%\notepad.exe");arroja una Win32Exception: "No se puede encontrar el archivo" pero normalmente debería funcionar.
Aren
@Aren: que se puede resolver llamando a Environment.ExpandEnvironmentVariables ()
sɐunıɔ ןɐ qɐp