2010-10-29 22 views
86

Jak otworzyć plik w języku C#? Nie mam na myśli czytania przez textreader i readline(). Mam na myśli otworzyć go jako niezależny plik w notatniku.Otwórz plik za pomocą Notatnika w języku C#

+0

Chcesz uruchomić wystąpienie notatnika z programu i otworzyć konkretny plik? – Dismissile

+0

Tak, to jest to, co chcę – Mohamed

+1

Uwaga: Kiedy próbowałem go z .Net 2.0, 'Process.Start' nie rozwinął automatycznie"% windir% ", pomijając go jednak, jak w [odpowiedź viabhava] (http: // stackoverflow .com/questions/4055266/open-a-file-with-notepad-in-c/4055295 # 4055295) lub rozwinięcie go jawnie ('Environment.GetEnvironmentVariable (" windir ")') działało pomyślnie. – Brian

Odpowiedz

134

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 chyba lepiej praktyka, gdyż spowoduje powłoce systemu Windows, aby otworzyć plik z to związane edytor . Dodatkowo, jeśli podany plik nie ma powiązania, będzie używał okna dialogowego Open With....

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

+1

Ucieknęłbym trochę, gdybym był tobą. –

+1

Zgadzam się, że jest to jeden sposób, aby to zrobić, innym sposobem, jeśli chcesz otworzyć dokument, ale nie uruchamiać programu, byłoby użycie czegoś podobnego do: richTextBox1.LoadFile (Program.editInC, RichTextBoxStreamType.UnicodePlainText) do ładowania rzeczywista zawartość do pliku. – Jim

+1

Lepiej przekazać nazwę pliku jako drugi parametr. W rzeczywistości, zgodnie z [dokumentacją] (http://msdn.microsoft.com/en-us/library/53ezey2s.aspx), twój kod nie powinien działać, ponieważ pojedynczy parametr 'Process.Start' jest nazwą pliku dokumentu lub aplikacji, natomiast twoja jest nazwą aplikacji połączoną z parametrem wiersza poleceń. – Vlad

24

to otworzy plik z domyślnym programem Windows (notatnik, jeśli go nie zmieniłeś);

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

Ucieknęłbym trochę, gdybym był tobą. –

+0

masz rację - naprawiono. –

11

Można użyć Process.Start, nazywając notepad.exe z pliku jako parametr.

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

Newlines nie są bardzo przydatne w Process.Start ... –

+0

@Albin Sunnanbo - dzięki ... dobry haczyk :) – Oded

+2

Nawiasem mówiąc,% pathVariables% nie działa z tą metodą. 'Process.Start (@"% windir% \ notepad.exe ");' wyrzuca wyjątek Win32Exception: "Can not find file", ale normalnie powinien działać. – Aren

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

Nie dostarczają wiele informacji, ale zakładając, że chcemy otworzyć tylko dowolny plik na komputerze z aplikacji, która jest określona dla obsługi domyślnej dla tego typu pliku, można użyć coś 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.

Funkcja WaitForExit spowoduje, że aplikacja zaczeka, aż zamknięta zostanie aplikacja, która została zamknięta.

+0

Doskonały i bardzo przydatny kod dla mnie, gdy próbowałem otworzyć plik z notatkami. – Unnikrishnan

+0

Przez pomyłkę kliknąłem "nie przydatne". Ale w rzeczywistości jest bardzo przydatny. – Unnikrishnan

Powiązane problemy