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


116

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


Вы хотите запустить экземпляр блокнота из своей программы и открыть определенный файл?
Уволен

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 заставит ваше приложение ждать, пока приложение, которое вы запустили, не будет закрыто.


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

26

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

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


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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.