2014-01-31 35 views
4

任務:
我想創建自己的文件擴展名,這樣當我點擊一個特定的「點」文件時,我的程序將打開它。但是,我寫的這個程序只是一箇中間人,它會做一些處理,但最終會將該文件傳遞到另一個程序進行處理。如何用我自己的程序打開一個文件並讓它調用另一個程序?

例如:
因此,例如,擴展.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上。

+0

@It並從系統路徑不同。它在我自己添加到路徑中的某個本地文件夾中。它必須位於/ usr/bin中嗎?哦,你知道什麼,我只是使用程序名稱,而不是完整的路徑。我會嘗試使用完整路徑並更新我的答案,無論是否有效。 –

+0

你把'te​​st_program'放在哪裏?如果**你的**路徑與**系統**路徑不同,「你路上的某個地方」可能不夠好。你可能想添加在'/ tmp'中創建一個文件的代碼來確定你的程序是否被調用。 – user4815162342

+0

你的'PATH'通常在shell中被修改,並且隻影響shell和從它開始的程序。另一方面,桌面環境在shell執行之前就啓動了,所以從shell中修改'PATH'不會影響它。該系統很可能找不到您的程序。安裝小型非系統程序的標準「系統」位置是'/ usr/local/bin'。 – user4815162342

回答

0

你可能只是打開一個終端和調查環境:

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