关于C语言打开文件的问题

我想打开一个文件进行加密
但是弹出一个窗口来选择文件而不是直接打开
下面是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下实现:
图片说明

4个回答

我们可以去调用系统的库来实现打开选择对话框。

在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下的不好截图,不过效果是一样的

感觉想实现这样的效果貌似要自己画UI吧……

Runner__1
T_world 回复togetyours: 看网上的说法好像是调用window.h?
3 年多之前 回复
togetyours
togetyours 可是很多程序都能这样打开一个文件,不像是自己画的,更像是调用了操作系统的一个函数
3 年多之前 回复

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下面的

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问