如何使用我自己的程序打开文件并让它调用另一个程序?

时间:2014-01-31 12:29:32

标签: c++ linux ubuntu file-extension open-with

任务:
我想创建自己的文件扩展名,以便当我点击特定的“点”文件时,我的程序将打开它。但是,我写的这个程序只是一个中间人,因为它会做一些处理,但最终将该文件传递给另一个程序进行处理。

示例:
例如,所有扩展名为.foo的纯文本文件都会显示为使用gedit打开。但真正发生的是,他们正在使用我的某个程序打开它们,反过来,我的程序将该文件传递到gedit

我的c ++程序要做到这一点,看起来像这样:

#include <string>
#include <cstdlib>

int main(int argc,  char** argv) {

    //open file with gedit
    system(("(gedit " + std::string(argv[1]) + " > /dev/null &)").c_str());

    //do other processing
    //...
}

我相信当你点击一个文件并且操作系统告诉它用某个程序打开时,该文件名将作为该程序的第二个参数传递给c ++程序(作为索引1,因为索引为零是程序的名称)。 &gedit作为后台进程运行的,并且语句周围的额外()可确保在关闭父shell时不会关闭gedit

问题:
说到这一切,当我将二进制文件放在我的$ PATH变量中列出的文件夹中时,这个程序正常工作,我从命令行运行程序,就像单击它一样传入文件。但是,当我实际设置要使用该程序打开的文件时,它不起作用。

我如何在文件点击中设置运行程序:
我跑了script found in the answer of this question
当我Right Click->Properties->Open With时程序显示出来 enter image description here
但是当我点击文件时似乎没有任何事情发生。我甚至把程序放在一个无限循环中并检查它是否作为一个进程运行,但事实并非如此。为什么程序根本没有被调用?或者它被调用并因某种原因立即关闭?那个脚本不能完成我需要的所有工作吗?我需要采取其他措施吗?我应该尝试注册程序并以不同的方式将其与文件扩展名相关联吗?

我在Ubuntu上。

1 个答案:

答案 0 :(得分:0)

您可以打开终端并调查环境:

int main(int argc,  char** argv) {
    std::system("gnome-terminal");
}