使用单个实例在NotePad中打开文本文件

时间:2012-11-14 10:26:53

标签: c# winforms file c#-4.0 notepad

在我的项目中,我正在尝试打开一个文本文件。以下代码可以正常工作,但当用户反复点击该按钮时,正在打开许多文件。 (我不想要)

System.Diagnostics.Process.Start(filePath);

我还尝试了thisFile.OpenFile.OpenText,它们没有打开文本文件,也没有显示任何错误(尝试使用try catch块)

File.Open(filePath); (or)
File.OpenText(filePath); (or)
FileStream fileStream = new FileStream(filePath, FileMode.Open);

我也试过这个:(错误:无法使用实例引用访问限定类型名称)

System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.Start(filePath);  /*red scribbles here*/
proc.WaitForExit();

如何仅显示文本文件(.txt)的一个实例。我在尝试中做错了吗?请建议。

编辑:

我想在之后打开其他文本文件但不一样,并且在打开文本文件(或许多文件)后也应该可以访问该应用程序。我只有一个表格。

2 个答案:

答案 0 :(得分:4)

在表单级别创建一个字典:

public Dictionary<string, Process> OpenedProcesses = new Dictionary<string, Process>(StringComparer.OrdinalIgnoreCase);

现在更改打开文件的方式(注意HasExited检查 - 这是必需的,以便用户可以关闭记事本并重新打开它):

// make sure that path is always in form C:\Folder\file.txt - less chance of different 
// paths pointing to the same file.
filePath = System.IO.Path.GetFullPath(filePath);

Process proc;
if (this.OpenedProcesses.TryGetValue(filePath, out proc) && !proc.HasExited)
{
    MessageBox.Show("The file is already open!");
    // it could be possible to activate the window of the open process but that is another question on its own.
    return;
}

proc = System.Diagnostics.Process.Start(filePath);
this.OpenedProcesses[filePath] = proc;

答案 1 :(得分:0)

检查文件是否已打开

example

然后按照自己的意愿完成工作。