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

144
我该如何在 C# 中打开一个文件?我的意思不是使用 TextReader 和 ReadLine() 读取它,而是像在记事本中一样单独打开它。

您想从程序中启动记事本实例并打开特定文件吗? - Dismissile
1
注意:当我尝试在 .Net 2.0 中使用时,Process.Start 没有自动扩展 "%windir%",但是像 viabhav 的回答 中省略它或显式扩展它 (Environment.GetEnvironmentVariable("windir")) 都可以成功地工作。 - Brian
你可以将记事本克隆版集成到你的应用程序中,并自定义其功能以满足你的需求。我使用C#编写了一个记事本克隆版,你可以在这里找到它:http://www.simplygoodcode.com/2012/04/notepad-clone-in-net-winforms.html - Luis Perez
6个回答

234
你需要使用 System.Diagnostics.Process.Start()
最简单的示例:
Process.Start("notepad.exe", fileName);

更通用的方法:

Process.Start(fileName);

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

注意:感谢评论区的意见。我的快速回答有些不对,我已经更新了答案以反映正确的方法。


1
如果我是你,我会进行一些转义。 - Albin Sunnanbo
1
我同意这是一种方法,如果你想打开文档但不运行程序,另一个方法是使用类似于以下代码的内容:richTextBox1.LoadFile(Program.editInC,RichTextBoxStreamType.UnicodePlainText),以将实际内容加载到文件中。 - Jim
1
最好将文件名作为第二个参数传递。实际上,根据文档 ,您的代码不应该工作,因为Process.Start的单个参数是文档或应用程序文件名,而您的参数是应用程序名称与命令行参数结合。 - Vlad
@Albin:谢谢,完全忽略了那个:p @Jim:我相信问题是在问如何启动编辑器。@Vlad:谢谢,你是正确的。 - Aren
15
使用 Process.Start(filename) 存在潜在的命令注入风险,攻击者可以将 MyTextFile.txt 替换成 MyMalicious.batfdisk ...。更好的方式是使用 Process.Start("notepad.exe", filename) - Geoff Bennett

34

你提供的信息不够丰富,但是假设你想要用指定文件类型默认处理程序打开计算机上的任意文件, 你可以使用类似于以下代码:

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)) - Wiccio

26

这将使用默认的 Windows 程序打开文件(如果您没有更改它,则为记事本);

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

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

14

您可以使用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

8

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接