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

C# 如何启动一个进程,在任何编辑器中打开文本文件并自动将光标移动到某个行号?,c#,C#,从c#,我想启动一个进程,它将在任何编辑器中打开一个文本文件,并自动将光标移动到某个行号 我可以使用 Process.Start(@"c:\myfile.txt"); 但我不知道如何将光标移动到该文件中的特定位置 用源代码回答: 是的,我用记事本++ private void openLog() { try { // see if notepad++ is installed on user's machine

从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
            }
        }

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

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

获取记事本++,然后您可以执行以下操作:

    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比使用多个附录更有效(解释如下)。

我认为唯一可行的方法是在键盘驱动程序输入级别实现自动化,假设编辑器每按下一个向下箭头就向下一行。只要禁用了自动换行功能,您就可以查看该记事本是否具有“转到行”功能。这仍然需要向进程发送键盘输入,这很糟糕。如果您可以使用记事本+,那么请检查。记事本++似乎有一个命令行参数,它将在特定行打开它。有完整源代码的最终解决方案吗?可能也在使用记事本++和UltraEdit。是的,已经在上面更新了。我正在编写一个小的关键字搜索实用工具,可以从所有网络服务器的日志中进行搜索。根据用户的请求,我想在特定行号处打开日志文件。我不确定使用瘦应用程序在嵌入式控件中呈现这些大型日志。它优雅吗?因为日志(通常)是只读的,所以您只需提取相关的行(和X周围的行)并在应用程序中本地显示它们。打开一个文本编辑器听起来有点过头了。太好了,谢谢你。顺便说一句,既然你知道这一点,我想你也会知道一种动态快速地找到“notepad++.exe”位置的方法?如果它是使用安装程序安装的,你可以从注册表获取它:var path=Registry.GetValue(“HKEY_LOCAL_MACHINE\\SOFTWARE\\notepad++”,null,null);是的,要求“任何”可能就是要求魔法。感谢Word Interop API。我要试一试。因为我非常依赖行号。我怀疑用MSWord打开文件是否有效。