Öffnen Sie eine Datei mit Notepad in C #

115

Wie öffne ich eine Datei in c #? Ich meine es nicht mit Textreader und readline () zu lesen. Ich meine, öffnen Sie es als unabhängige Datei im Editor.

Mohamed
quelle
Sie möchten eine Instanz von Notepad aus Ihrem Programm heraus starten und eine bestimmte Datei öffnen lassen?
Entlassung
1
Hinweis: Als ich es mit .Net 2.0 ausprobierte Process.Start, wurde "% windir%" nicht automatisch erweitert, obwohl das Auslassen wie in der Antwort von viabhav oder das explizite Erweitern ( Environment.GetEnvironmentVariable("windir")) erfolgreich funktioniert hat.
Brian
Sie können einen Notizblockklon in Ihre Anwendung integrieren und so anpassen, dass er genau so funktioniert, wie Sie es möchten. Ich schreibe einen Notizblock-Klon in C #. Sie finden ihn hier: simplygoodcode.com/2012/04/notepad-clone-in-net-winforms.html
Luis Perez

Antworten:

190

Du brauchst System.Diagnostics.Process.Start().

Das einfachste Beispiel:

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

Allgemeinerer Ansatz:

Process.Start(fileName);

Der zweite Ansatz ist wahrscheinlich eine bessere Vorgehensweise, da dadurch die Windows-Shell Ihre Datei mit dem zugehörigen Editor öffnet. Wenn die angegebene Datei keine Zuordnung hat, wird außerdem der Open With...Dialog aus Windows verwendet.

Hinweis an diejenigen in den Kommentaren, danke für Ihre Eingabe. Meine schnelle und schmutzige Antwort war etwas falsch. Ich habe die Antwort aktualisiert, um den richtigen Weg wiederzugeben.

Aren
quelle
1
Ich würde fliehen, wenn ich du wäre.
Albin Sunnanbo
1
Ich bin damit einverstanden, dass dies eine Möglichkeit ist, dies zu tun. Eine andere Möglichkeit, wenn Sie das Dokument öffnen, aber das Programm nicht ausführen möchten, besteht darin, Folgendes zu verwenden: richTextBox1.LoadFile (Program.editInC, RichTextBoxStreamType.UnicodePlainText) zum Laden des Dokuments tatsächlicher Inhalt in eine Datei.
Jim
1
Es ist besser, den Dateinamen als zweiten Parameter zu übergeben. Laut Dokumentation sollte Ihr Code eigentlich nicht funktionieren, da der einzige Parameter von Process.StartDokument- oder Anwendungsdateiname ist, während Ihr Name der Anwendungsname in Kombination mit dem Befehlszeilenparameter ist.
Vlad
@Albin: Danke, das habe ich völlig übersehen: p @Jim: Ich glaube, die Frage war, wie man einen Editor startet. @Vlad: Danke, du bist richtig.
Aren
11
Mit Process.Start(filename)einer potenziellen Befehl Injektion, wodurch ein Angreifer ersetzen könnte MyTextFile.txtfür MyMalicious.batoder fdisk .... Besser zu benutzen Process.Start("notepad.exe", filename).
Geoff Bennett
29

Sie geben nicht viele Informationen an, aber wenn Sie nur eine beliebige Datei auf Ihrem Computer mit der Anwendung öffnen möchten, die für den Standardhandler für diesen Dateityp angegeben ist, können Sie Folgendes verwenden:

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

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

Der Parameter UseShellExecute weist Windows an, das Standardprogramm für den Dateityp zu verwenden, den Sie öffnen.

Der WaitForExit bewirkt, dass Ihre Anwendung wartet, bis die von Ihnen luanchierte Anwendung geschlossen wurde.

TimothyP
quelle
Außerdem wäre es gut, a zu verwenden if(File.Exists(fileToOpen)), um zu vermeiden, dass eine Ausnahme auftritt.
Wiccio
26

Dadurch wird die Datei mit dem Standard-Windows-Programm geöffnet (Editor, wenn Sie ihn nicht geändert haben).

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

Sie können den Process.StartAufruf notepad.exemit der Datei als Parameter verwenden.

 Process.Start(@"notepad.exe", pathToFile);
Oded
quelle
2
% PathVariables% funktionieren übrigens nicht mit dieser Methode. Process.Start(@"%windir%\notepad.exe");löst eine Win32Exception aus: "Datei kann nicht gefunden werden", aber normalerweise sollte es funktionieren.
Aren
@Aren: das kann gelöst werden, indem Environment.ExpandEnvironmentVariables ()
aufgerufen wird