在C#中使用记事本打开文件


115

如何在C#中打开文件?我并不是说要通过textreader和readline()进行阅读。我的意思是在记事本中将其作为独立文件打开。


您要从程序启动记事本实例并打开一个特定文件吗?
Dismissile

1
注意:在我使用.Net 2.0进行尝试时,Process.Start并没有自动扩展“%windir%”,尽管在viabhav的答案中忽略了它或明确地将其扩展(Environment.GetEnvironmentVariable("windir"))都成功了。
Brian

您可以将记事本克隆集成到您的应用程序中,然后对其进行自定义,使其以所需的方式运行。我在C#中编写了一个记事本克隆,您可以在这里找到它:simplygoodcode.com/2012/04/notepad-clone-in-net-winforms.html
Luis Perez,

Answers:


190

你需要System.Diagnostics.Process.Start()

最简单的例子:

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

更通用的方法:

Process.Start(fileName);

第二种方法可能是更好的做法,因为这将导致Windows Shell使用其关联的编辑器打开文件。此外,如果指定的文件没有关联,它将使用Open With...Windows中的对话框。

请注意注释中的内容,谢谢您的输入。我的快速n'肮脏的答案略有偏离,我已经更新了答案以反映正确的方法。


1
如果我是你,我会逃避现实。
Albin Sunnanbo 2010年

1
我同意这是执行此操作的一种方法,如果您想打开文档但不运行程序,则另一种方法是使用类似于以下内容的代码:richTextBox1.LoadFile(Program.editInC,RichTextBoxStreamType.UnicodePlainText)来加载实际内容放入文件中。
吉姆(Jim)2010年

1
最好将文件名作为第二个参数传递。实际上,根据文档,您的代码不起作用,因为的单个参数Process.Start是文档或应用程序文件名,而您的代码是应用程序名和命令行参数的组合。
弗拉德

@Albin:谢谢,完全忽略了一个:p @Jim:我相信问题在询问如何启动编辑器。@Vlad:谢谢,你是正确的。
阿伦(Aren)2010年

11
使用Process.Start(filename)是一个潜在的命令注入,由此攻击者可以替代MyTextFile.txtMyMalicious.batfdisk ...。更好地使用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")

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

12

您可以使用Process.Startnotepad.exe以文件作为参数进行调用。

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

2
顺便说一下,%pathVariables%不适用于此方法。Process.Start(@"%windir%\notepad.exe");引发Win32Exception:“找不到文件”,但通常它应该可以工作。
阿伦(Aren)2010年

@Aren:它可以解决调用Environment.ExpandEnvironmentVariables()
sɐunıɔןɐqɐp

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.