C# 应用程序关闭后打开文件

3

我正在使用C#编写文件,该文件位于桌面上。当我的应用程序关闭时,可以打开这个文件(而不是双击它)吗?

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
   writer.Close();
   /* Some code here */
}

我不明白,请重新表述你的问题。 - Sriram Sakthivel
1
“打开文件” 是指什么?作为一个对象?进程?在记事本中? - Yair Nevet
我已经完成了向文件的写入,现在想在记事本中打开文本文件(通过双击文件名来实现)。在C#中有一种方法可以在关闭应用程序窗体后打开此文件吗? - user3428151
@user3428151 好的,请看我的回答。 - Yair Nevet
可能的重复问题:https://dev59.com/imgu5IYBdhLWcg3wYWFX,http://stackoverflow.com/questions/12294653/open-a-text-file-in-c-sharp,http://stackoverflow.com/questions/5017221/c-sharp-open-file-with-associated-application-passing-arguments?lq=1 - chiccodoro
@user3428151 请在您的问题中添加澄清以使其更准确。 - Yair Nevet
4个回答

5
根据楼主的澄清评论, 在这里打开一个 Notepad 进程来打开文件:
Process.Start("notepad.exe", fileName);

更新:

在打开记事本进程后,一定要立即“终止”“父”进程,否则会像@Kilazur评论中所述一样卡住:

Process.GetCurrentProcess().Kill(); // or Application.Exit(); or anything else

值得一提的是,如果您以这种方式打开文件,当您尝试关闭程序时(程序)会挂起。至少我正在经历这种情况,是的,这与OP没有真正关系。 - Kilazur
好发现!愚蠢明显,但在肥皂和其他东西发明之前,这就是天才的诞生方式。 - Kilazur
其实我怀疑你是否真的需要杀死这个进程。我会尝试一下并再次评论。 - Thorsten Dittmar
我刚试了一下,在我的情况下应用程序没有挂起。请看我的回答 - 我现在要进行编辑。 - Thorsten Dittmar

4
您可以使用 Process.Start 启动文件类型的默认应用程序。关键是要正确使用 ProcessStartInfo。将文件路径和名称作为 "application" 传递,并将 UseShellExecute 设置为 true
我尝试了以下代码:
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
    ProcessStartInfo si = new ProcessStartInfo();
    si.FileName = @"C:\somefile.txt";
    si.UseShellExecute = true;

    Process.Start(si);
}

这将打开给定文件并启动Notepad(默认应用程序),然后结束该应用程序。

请注意,这不一定会启动Nodepad,而是启动*.txt文件的默认应用程序,这可能是您想要的,因为您说您想要与双击文件时相同的行为。


1

我不确定您所说的“文件”是什么意思,但是您可以按照以下步骤使用默认应用程序打开文档:

System.Diagnostics.Process.Start(@"path to file");

注意: 它将使用默认应用程序,通常是记事本。如果用户更改了默认应用程序,则会使用其他应用程序。这是一个好的方法(我不会明确调用记事本,因为用户可能有另一个喜欢的编辑器,如notepad ++)。
另请参见启动新进程和终止当前进程

1

我不确定你想要什么,但是我会尽力猜测:

  1. 如果您想在后台进程中写入文件,则使用StreamWriter是正确的方法。

    using (StreamWriter sw = new StreamWriter(filepath)) { //写入内容 }

  2. 如果您想要启动用户桌面上的文件,则可能需要创建一个新进程来调用该文件关联的应用程序。


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