如何启动一个将在任何编辑器中打开文本文件并自动将光标移动到某个行号的进程?

从c#开始,我想启动一个进程,它将在任何编辑器中打开一个文本文件,并自动将光标移动到某个行号。

我可以使用打开文件

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

但我不知道如何将光标移动到该文件中的特定位置。


回答源代码:

是的,我用了记事本++

 private void openLog() { try { // see if notepad++ is installed on user's machine var nppDir = (string)Registry.GetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\Notepad++", null, null); if (nppDir != null) { var nppExePath = Path.Combine(nppDir, "Notepad++.exe"); var nppReadmePath = Path.Combine(yourDirectory,fileName ); var line = 20; var sb = new StringBuilder(); sb.AppendFormat("\"{0}\" -n{1}", nppReadmePath, lineNo); Process.Start(nppExePath, sb.ToString()); } else { string newPath = @"\\mySharedDrive\notpad++\bin\notepad++.exe"; Process.Start(newPath, @"\\" + filePath + " -n" + lineNo); // take exe from my shared drive } } catch (Exception e) { Process.Start(@"\\" + FilePath); // open using notepad } } 

获取Notepad ++,然后你可以这样做:

  var nppDir = (string)Registry.GetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\Notepad++", null, null); var nppExePath = Path.Combine(nppDir, "Notepad++.exe"); var nppReadmePath = Path.Combine(nppDir, "readme.txt"); var line = 20; var sb = new StringBuilder(); sb.AppendFormat("\"{0}\" -n{1}", nppReadmePath, line); Process.Start(nppExePath, sb.ToString()); 

在这个例子中,我们从注册表获取n ++的安装路径,构建exe和readme.txt文件的路径,用第20行的游标打开自己的readme.txt文件。使用StringBuilder比使用多个附加更有效(在SO上的某处解释) )。

解决方案在很大程度上取决于系统上打开的进程/编辑器。 该编辑器必须有一个开发人员API,您可以使用它来访问诸如设置范围和更改光标位置等function。 例如,如果打开的编辑器是Microsoft Word,则可以使用Word Interop API在特定位置设置选择。 在“任何编辑器”中都没有通用的方法,因为每个编辑器都有自己的API(或者根本没有外向的API)。

也许你这是错误的方式。 我不确定你要完成什么,但我认为在属于你的应用程序的编辑器中打开文本文件会更容易。 也许是另一种具有WYSIWYG编辑器控件的表单。 这样您就可以完全控制光标在该编辑器中的位置。 否则,对于任何可行的事情,都有太多未知数。