簡體   English   中英

如何使用我自己的程序打開文件並讓它調用另一個程序?

[英]How do I open a file with my own program and have it invoke another program?

任務:
我想創建自己的文件擴展名,以便當我點擊特定的“點”文件時,我的程序將打開它。 但是,我寫的這個程序只是一個中間人,因為它會做一些處理,但最終將該文件傳遞給另一個程序進行處理。

例:
因此,例如,擴展名為.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作為后台進程運行,並且語句周圍的extra ()確保在關閉父shell時不會關閉gedit

問題:
說到這一切,當我將二進制文件放在我的$ PATH變量中列出的文件夾中時,這個程序正常工作,我從命令行運行程序,就像單擊它一樣傳入文件。 但是,當我實際設置要使用該程序打開的文件時,它不起作用。

我是如何在文件點擊中設置運行程序的:
我運行了這個問題的答案中找到腳本
當我Right Click->Properties->Open With時,程序顯示出來 在此輸入圖像描述
但是當我點擊文件時似乎沒有任何事情發生。 我甚至把程序放在一個無限循環中並檢查它是否作為一個進程運行,但事實並非如此。 為什么程序根本沒有被調用? 或者它被調用並因某種原因立即關閉? 那個腳本不能完成我需要的所有工作嗎? 我需要采取其他措施嗎? 我應該嘗試注冊程序並以不同的方式將其與文件擴展名相關聯嗎?

我在Ubuntu上。

您可能只需打開一個終端並調查環境:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM