我想打开一个文件进行加密
但是弹出一个窗口来选择文件而不是直接打开
下面是main函数
、、、、、、、、、、、
int main ()
{
FILE *inpt = fopen("D:\123\12.txt","r");
FILE *oupt = fopen("D:\123\21.txt","w");
getchar();
encrypt(inpt,oupt);
fclose(oupt);
fclose(inpt);
return 0;
}
这样是直接打开一个文件,我想类似于这样打开,不知道怎么做,分别在windows下和unbuntu下实现:
感觉想实现这样的效果貌似要自己画UI吧……
std::string ChoseFilePath()
{
std::string strPath;
strPath.clear();
// 打开文件打开对话框
OPENFILENAMEA ofn; // 公共对话框结构。
char szFile[MAX_PATH]={0}; // 保存获取文件名称的缓冲区。
// 初始化选择文件对话框。
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = GetForegroundWindow();//
ofn.lpstrFile = szFile;
//
//
ofn.lpstrFile[0] = 0;
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = "所有文件(\"*\")";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
//这个可以指定初始化的路径
ofn.lpstrInitialDir = "";
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
// 显示打开选择文件对话框。
if ( GetOpenFileNameA(&ofn) )
{
//显示选择的文件。
MessageBoxA(NULL,szFile,"File Selected",MB_OK);
strPath.assign(szFile);
}
return strPath;
}
上面的代码贴得有点乱,就一个函数,在win下面的
我们可以去调用系统的库来实现打开选择对话框。
在windows下:
#include <windows.h>
#include <Shlobj.h>
#include <tchar.h>
#include <Commctrl.h>
#pragma comment(lib, "comctl32.lib")
int main()
{
LPITEMIDLIST pil = NULL;
INITCOMMONCONTROLSEX InitCtrls = { 0 };
TCHAR szBuf[4096] = { 0 };
BROWSEINFO bi = { 0 };
bi.hwndOwner = NULL;
bi.iImage = 0;
bi.lParam = NULL;
bi.lpfn = NULL;
bi.lpszTitle = _T("请选择文件路径");
bi.pszDisplayName = szBuf;
bi.ulFlags = BIF_BROWSEINCLUDEFILES;
InitCommonControlsEx(&InitCtrls);//在调用函数SHBrowseForFolder之前需要调用该函数初始化相关环境
pil = SHBrowseForFolder(&bi);
if (NULL != pil)//若函数执行成功,并且用户选择问件路径并点击确定
{
SHGetPathFromIDList(pil, szBuf);//获取用户选择的文件路径
wprintf_s(_T("%s"), szBuf);
}
return 0;
}
在Ubuntu下的代码为:
#include <gtk/gtk.h>
void select_file()
{
GtkWidget *dialog;
dialog=gtk_file_chooser_dialog_new("SelectFile",NULL,GTK_FILE_CHOOSER_ACTION_OPEN,GTK_STOCK_CANCEL,GTK_RESPONSE_CANCEL,GTK_STOCK_OK,GTK_RESPONSE_ACCEPT,NULL);
if(gtk_dialog_run(GTK_DIALOG(dialog))==GTK_RESPONSE_ACCEPT)
{
char *filename;
filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
printf("file name is : %s ", filename);
}
gtk_widget_destroy(dialog);
}
int main(int argc,char **argv)
{
gtk_init(&argc,&argv);
select_file();
return 0;
}
效果如下:
linux下的不好截图,不过效果是一样的