Откройте файл с помощью Блокнота на C #

116

Как открыть файл в c #? Я не имею в виду чтение с помощью textreader и readline (). Я имею в виду открыть его как отдельный файл в блокноте.

Mohamed
источник
Вы хотите запустить экземпляр блокнота из своей программы и открыть определенный файл?
Уволен
1
Примечание. Когда я пробовал это с .Net 2.0, Process.Startавтоматически не расширял "% windir%", хотя опускание его, как в ответе viabhav, или его явное расширение ( Environment.GetEnvironmentVariable("windir")) сработало успешно.
Брайан
Вы можете интегрировать клон блокнота в свое приложение и настроить его для работы так, как вы этого хотите. Я пишу клон блокнота на C #, вы можете найти его здесь: simplegoodcode.com/2012/04/notepad-clone-in-net-winforms.html
Луис Перес,

Ответы:

190

Вам нужно System.Diagnostics.Process.Start().

Самый простой пример:

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

Более общий подход:

Process.Start(fileName);

Второй подход, вероятно, лучше, так как это заставит оболочку Windows открыть ваш файл с помощью связанного с ним редактора. Кроме того, если указанный файл не имеет ассоциации, он будет использовать Open With...диалог из окон.

Обратите внимание на тех, кто находится в комментариях, спасибо за ваш вклад. Мой быстрый и грязный ответ был немного неправильным, я обновил ответ, чтобы отразить правильный путь.

Арен
источник
1
На твоем месте я бы сбежал.
Альбин Суннанбо,
1
Я согласен с тем, что это один способ сделать это, а другой способ, если вы хотите открыть документ, но не запускать программу, - это использовать что-то вроде: richTextBox1.LoadFile (Program.editInC, RichTextBoxStreamType.UnicodePlainText) для загрузки фактическое содержимое в файл.
Джим
1
Лучше передать имя файла в качестве второго параметра. На самом деле, согласно документации , ваш код не должен работать, поскольку единственный параметр Process.Start- это имя файла документа или приложения, тогда как ваш - имя приложения в сочетании с параметром командной строки.
Влад
@Albin: Спасибо, совершенно не заметил этого: p @Jim: Я думаю, вопрос был в том, как запустить редактор. @Vlad: Спасибо, вы правы.
Арен
11
Использование Process.Start(filename)является потенциальной инъекцией команды, в результате чего злоумышленник может заменить MyTextFile.txtна MyMalicious.batили fdisk .... Лучше использовать Process.Start("notepad.exe", filename).
Джефф Беннетт
29

Вы не предоставляете много информации, но предполагая, что вы хотите открыть любой файл на своем компьютере с помощью приложения, указанного для обработчика по умолчанию для этого типа файла, вы можете использовать что-то вроде этого:

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

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

Параметр UseShellExecute указывает Windows использовать программу по умолчанию для типа файла, который вы открываете.

WaitForExit заставит ваше приложение ждать, пока приложение, которое вы запустили, не будет закрыто.

TimothyP
источник
И, кроме того, было бы хорошо использовать, if(File.Exists(fileToOpen))чтобы избежать исключения.
Викчо
26

это откроет файл с программой Windows по умолчанию (блокнот, если вы его не меняли);

Process.Start(@"c:\myfile.txt")
Колин Пикард
источник
15
System.Diagnostics.Process.Start( "notepad.exe", "text.txt");
Vaibhav
источник
12

Вы можете использовать Process.Startвызов notepad.exeс файлом в качестве параметра.

 Process.Start(@"notepad.exe", pathToFile);
Одед
источник
2
Кстати,% pathVariables% не работают с этим методом. Process.Start(@"%windir%\notepad.exe");выдает исключение Win32Exception: «Не удается найти файл», но обычно он должен работать.
Aren
@Aren: это можно решить, вызвав Environment.ExpandEnvironmentVariables ()
sɐunıɔ ןɐ qɐp