我希望我的C ++应用程序实现“打开文件夹”功能,就像在firefox和下载管理器中一样。这是我提出的代码。
int File::openTempFile(std::string temp_file_dir)
{
std::string file_path = temp_file_dir + "/" ;
file_path = file_path + this->additional_info ;
// if there is already an temporary file then delete it//
if( temporary_file != "" )
{
// :TODO: open temporary file stack //
// so when the application dinit we could remove those //
// remove(temporary_file.c_str() );
}
/* write temporary file */
FILE* fp = fopen (file_path.c_str(), "w");
if( fp== NULL)
return FALSE;
fwrite( m_data, 1, m_size, fp);
fclose(fp);
// now open it using natulus //
char * parmList[] = {strdup("nautilus"),strdup(file_path.c_str() )} ;
int pid;
if(( pid= fork() ) == -1)
perror("fork failed");
if( pid ==0 ){
int a = execvp("nautilus" , parmList);
printf("exevp failed to load the temporary file");
}
temporary_file = file_path ;
return TRUE;
}
但是不是一个nautilus窗口,它打开3个窗口。任何想法是什么原因?我怎么能得到nautilus“打开”对话框而不是显示在目录上?
答案 0 :(得分:2)
打开文件夹时,我使用xdg-open
命令打开指定文件夹,并为给定的桌面环境打开首选文件管理器。
在我的系统运行KDE
时,它会调用dolphin
来显示文件夹,xfce4
会调用thunar
,因为它们是nautilus
根据我的设置首选文件管理器。我经常不希望使用nautilus
,因为界面与我的首选应用程序不同,在小部件,样式等方面看起来与其他应用程序不一致 - 并赢得& #39; t在我的任务栏中对它进行分组。
它还为我的默认开放式设置使用单独的首选项,并与我的工作流程冲突。
此外,emerge
并非必须保证在我的系统上。
例如,在我的一些旧系统中,我已经emerge
定制gentoo系统,我受RAM或硬盘空间限制,我只有twm
d说xfce4
和nautilus
,所以twm
不存在。
就nautilus特定的行为而言,我遇到了类似的问题,nautilus在初始调用时创建了一个桌面(就像我运行nautilus --help
时那样)。
调用Application Options:
-c, --check Perform a quick set of self-check tests.
--version Show the version of the program.
-g, --geometry=GEOMETRY Create the initial window with the given geometry.
-w, --new-window Always open a new window for browsing specified URIs
-n, --no-default-window Only create windows for explicitly specified URIs.
--no-desktop Never manage the desktop (ignore the GSettings preference).
--force-desktop Always manage the desktop (ignore the GSettings preference).
-q, --quit Quit Nautilus.
-s, --select Select specified URI in parent folder.
--display=DISPLAY X display to use
会显示以下选项:
nautilus
很遗憾,我无法帮助您专门调用xdg-open
"打开..."对话框,虽然mimeapps.list
将在指定文件时使用默认应用程序。可能是{{1}}文件中的轮询配置(可以位于多个级联覆盖位置之一:包括但不限于用户桌面,用户,sysadmin-desktop,sysadmin,default-desktop和default)。