Otwórz plik za pomocą Notatnika w C #

116

Jak otworzyć plik w C #? Nie mam na myśli czytania tego przez textreader i readline (). Mam na myśli otwarcie go jako niezależnego pliku w notatniku.

Mohamed
źródło
Chcesz uruchomić wystąpienie notatnika ze swojego programu i otworzyć określony plik?
Dismissile
1
Uwaga: Kiedy próbowałem to z .Net 2.0, Process.Startnie rozwijałem automatycznie "% windir%", chociaż pomijanie go, jak w odpowiedzi viabhav, lub rozszerzenie go jawnie ( Environment.GetEnvironmentVariable("windir")) działało pomyślnie.
Brian
Możesz zintegrować klon notatnika ze swoją aplikacją i dostosować ją tak, aby działała tak, jak chcesz. Piszę klon notatnika w C #, możesz go znaleźć tutaj: Simplygoodcode.com/2012/04/notepad-clone-in-net-winforms.html
Luis Perez

Odpowiedzi:

190

Potrzebujesz System.Diagnostics.Process.Start().

Najprostszy przykład:

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

Bardziej ogólne podejście:

Process.Start(fileName);

Drugie podejście jest prawdopodobnie lepszą praktyką, ponieważ spowoduje to, że powłoka systemu Windows otworzy plik za pomocą skojarzonego z nim edytora. Dodatkowo, jeśli określony plik nie ma skojarzenia, użyje Open With...okna dialogowego z systemu Windows.

Uwaga dla osób w komentarzach, dziękuję za wkład. Moja szybka i brudna odpowiedź była nieco błędna, zaktualizowałem odpowiedź, aby odzwierciedlała prawidłowy sposób.

Aren
źródło
1
Na twoim miejscu mógłbym trochę uciec.
Albin Sunnanbo
1
Zgadzam się, że jest to jeden ze sposobów, aby to zrobić, innym sposobem, jeśli chcesz otworzyć dokument, ale nie uruchomić programu, byłoby użycie czegoś w stylu: richTextBox1.LoadFile (Program.editInC, RichTextBoxStreamType.UnicodePlainText) do załadowania rzeczywistą zawartość do pliku.
Jim
1
Lepiej jest podać nazwę pliku jako drugi parametr. Właściwie, zgodnie z dokumentacją , twój kod nie powinien działać, ponieważ pojedynczym parametrem Process.Startjest nazwa dokumentu lub pliku aplikacji, podczas gdy twój to nazwa aplikacji połączona z parametrem wiersza poleceń.
Vlad
@Albin: Dzięki, całkowicie to przeoczyłem: p @Jim: Myślę, że chodziło o pytanie, jak uruchomić edytor. @Vlad: Dzięki, masz rację.
Aren
11
Korzystanie Process.Start(filename)potencjalne wtrysku poleceń, przy czym osoba atakująca mogłaby zastąpić MyTextFile.txtna MyMalicious.batlub fdisk .... Lepiej używać Process.Start("notepad.exe", filename).
Geoff Bennett
29

Nie podajesz zbyt wielu informacji, ale zakładając, że chcesz otworzyć dowolny plik na swoim komputerze za pomocą aplikacji określonej dla domyślnej procedury obsługi dla tego typu pliku, możesz użyć czegoś takiego:

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

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

Parametr UseShellExecute informuje system Windows, aby używał programu domyślnego dla typu otwieranego pliku.

WaitForExit spowoduje, że aplikacja zaczeka, aż aplikacja, którą zmyłeś, zostanie zamknięta.

Timothy P.
źródło
Ponadto dobrze byłoby użyć if(File.Exists(fileToOpen))znaku, aby uniknąć wystąpienia wyjątku.
Wiccio
26

to otworzy plik w domyślnym programie Windows (notatniku, jeśli go nie zmieniłeś);

Process.Start(@"c:\myfile.txt")
Colin Pickard
źródło
15
System.Diagnostics.Process.Start( "notepad.exe", "text.txt");
Vaibhav
źródło
12

Możesz użyć Process.Start, wywołując notepad.exeplik jako parametr.

 Process.Start(@"notepad.exe", pathToFile);
Oded
źródło
2
Nawiasem mówiąc,% pathVariables% nie działa z tą metodą. Process.Start(@"%windir%\notepad.exe");zgłasza wyjątek Win32Exception: „Cannot find file”, ale normalnie powinno działać.
Aren
@Aren: które można rozwiązać wywołując Environment.ExpandEnvironmentVariables ()
sɐunıɔ ןɐ qɐp