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

标签 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 作为后台进程运行,语句周围的额外 () 确保 gedit 不会在父 shell 关闭时关闭。

问题:
综上所述,当我将二进制文件放在我的 $PATH 变量中列出的文件夹中并且我从命令行运行该程序并传递文件时,该程序可以正常工作,就好像它被单击一样。但是,当我实际设置要用程序打开文件时,它不起作用。

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

我在 Ubuntu 上。

最佳答案

您可能只是打开一个终端并调查环境:

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

关于c++ - 如何用我自己的程序打开一个文件并让它调用另一个程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21480129/

相关文章:

c++ - 将按钮连接到任意函数

c++ - 如何在等待程序启动困惑/GTK+ 时制作加载/介绍动画弹出窗口

php - Wget Linux 命令正在为仅 su​​do 用户下载具有读取权限的文件 - 如何为所有用户授予读取权限?

c++ - Matlab Mex 库生命周期

c++ - 是否有任何工具可以提供项目中函数使用/调用/详细信息的列表(批量代码)

linux - 无法在 IPTABLES 防火墙上打开端口

php - 需要将多个 pdf 合并为一个带有目录部分的 PDF

python - 在浏览器上启动媒体然后退出

c++ - Ubuntu 上 Jupyter 的 Cling 内核

C++ 模板字符串连接