Apri un file con Blocco note in C #


116

Come apro un file in c #? Non intendo leggerlo da textreader e readline (). Intendo aprirlo come file indipendente nel blocco note.


Vuoi avviare un'istanza di Blocco note dal tuo programma e farlo aprire un file specifico?
Licenziamento

1
Nota: quando l'ho provato con .Net 2.0, Process.Startnon ho espanso automaticamente "% windir%", sebbene omettendolo come nella risposta di viabhav o espandendolo esplicitamente ( Environment.GetEnvironmentVariable("windir")) funzionasse correttamente.
Brian

Puoi integrare un clone del blocco note nella tua applicazione e personalizzarlo in modo che funzioni nel modo desiderato. Scrivo un clone del blocco note in C # lo puoi trovare qui: simplygoodcode.com/2012/04/notepad-clone-in-net-winforms.html
Luis Perez

Risposte:


190

Hai bisogno System.Diagnostics.Process.Start().

L'esempio più semplice:

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

Approccio più generico:

Process.Start(fileName);

Il secondo approccio è probabilmente una pratica migliore in quanto ciò farà sì che la shell di Windows apra il tuo file con l'editor associato. Inoltre, se il file specificato non ha un'associazione, utilizzerà la Open With...finestra di dialogo da Windows.

Nota a quelli nei commenti, grazie per il tuo contributo. La mia risposta rapida e sporca era leggermente sbagliata, ho aggiornato la risposta per riflettere il modo corretto.


1
Farei un po 'di fuga se fossi in te.
Albin Sunnanbo

1
Sono d'accordo che questo è un modo per farlo, un altro modo se si desidera aprire il documento ma non eseguire il programma sarebbe utilizzare qualcosa sulla falsariga di: richTextBox1.LoadFile (Program.editInC, RichTextBoxStreamType.UnicodePlainText) per caricare il contenuto effettivo in un file.
Jim

1
È meglio passare il nome del file come secondo parametro. In realtà, secondo la documentazione , il tuo codice non dovrebbe funzionare, poiché il singolo parametro di Process.Startè il nome del documento o del file dell'applicazione, mentre il tuo è il nome dell'applicazione combinato con il parametro della riga di comando.
Vlad

@ Albin: Grazie, l'ho completamente trascurato: p @ Jim: Credo che la domanda fosse come avviare un editor. @Vlad: grazie, hai ragione.
Aren

11
Usando Process.Start(filename)è un potenziale di iniezione di comando, per cui un utente malintenzionato potrebbe sostituire MyTextFile.txtper MyMalicious.bato fdisk .... Meglio usare Process.Start("notepad.exe", filename).
Geoff Bennett

29

Non stai fornendo molte informazioni, ma supponendo che tu voglia aprire qualsiasi file sul tuo computer con l'applicazione specificata per il gestore predefinito per quel tipo di file, puoi usare qualcosa del genere:

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

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

Il parametro UseShellExecute indica a Windows di utilizzare il programma predefinito per il tipo di file che si sta aprendo.

WaitForExit farà sì che la tua applicazione attenda fino a quando l'applicazione che hai ricevuto non è stata chiusa.


Inoltre, sarebbe opportuno utilizzare a if(File.Exists(fileToOpen))per evitare di incappare in un'eccezione.
Wiccio

26

questo aprirà il file con il programma Windows predefinito (blocco note se non l'hai cambiato);

Process.Start(@"c:\myfile.txt")

15
System.Diagnostics.Process.Start( "notepad.exe", "text.txt");

12

Puoi usare Process.Start, chiamando notepad.execon il file come parametro.

 Process.Start(@"notepad.exe", pathToFile);

2
A proposito,% pathVariables% non funziona con questo metodo. Process.Start(@"%windir%\notepad.exe");genera un'eccezione Win32Exception: "Impossibile trovare il file" ma normalmente dovrebbe funzionare.
Aren

@Aren: che può essere risolto chiamando Environment.ExpandEnvironmentVariables ()
sɐunıɔ ןɐ qɐp

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.