8

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

3 回答 3

11

获取 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 文件的路径,打开其自己的 readme.txt 文件,光标位于第 20 行。使用 StringBuilder 比使用多个附加更有效(在某处解释 SO )。

于 2012-12-07T00:59:50.107 回答
2

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

于 2012-12-07T00:51:02.463 回答
1

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

于 2012-12-07T00:54:09.143 回答