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.


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.


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.


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")


12

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

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

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.