Відкрийте файл із «Блокнотом» у C


116

Як відкрити файл в c #? Я не маю на увазі читання текстовим читанням читанням рядка (). Я маю на увазі відкрити його як незалежний файл у блокноті.


Ви хочете запустити екземпляр блокнота зі своєї програми і відкрити для нього певний файл?
Відхилення

1
Примітка: Коли я спробував це з .Net 2.0, Process.Startне розширювався автоматично "% windir%", хоча пропускаючи його як у відповіді viabhav або розширюючи його явно ( Environment.GetEnvironmentVariable("windir")), працював успішно.
Брайан

Ви можете інтегрувати клон блокнота у свою програму та налаштувати його так, як ви хочете. Я пишу клон блокнота в C #, ви можете знайти його тут: простоgoodcode.com/2012/04/
Луїс Перес

Відповіді:


190

Вам потрібно System.Diagnostics.Process.Start().

Найпростіший приклад:

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

Більш загальний підхід:

Process.Start(fileName);

Другий підхід, мабуть, є кращою практикою, оскільки це призведе до того, що програма Windows Shell відкриє ваш файл із пов'язаним редактором. Крім того, якщо вказаний файл не має асоціації, він використовуватиме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 змусить вашу програму чекати, поки закрита вами програма не буде закрита.


І, крім того, було б добре використовувати a, if(File.Exists(fileToOpen))щоб не стикатися з винятком.
Wiccio

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: що можна вирішити, закликаючи Environment.ExpandEnvironmentVariables ()
sɐunıɔ ןɐ qɐp

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.