ファイルオープンダイアログ

fileopen.png

ウィンドウズの場合

/**
* @brief ファイルの選択ダイアログを表示
* @param initialDir ダイアログの初期ディレクトリ名
* @param initialFile ダイアログの初期ファイル名
* @return 選択したファイル
*/
std::string  GetFileNameUseDialog(std::string initialDir, std::string initialFile)
{
    // 現在の作業ディレクトリを取得
    TCHAR oldCurrentDir[MAX_PATH];
    GetCurrentDirectory(MAX_PATH, oldCurrentDir);
 
    // 初期ディレクトリ名を設定
    TCHAR tchInitialDir[MAX_PATH];
    _stprintf_s(tchInitialDir, MAX_PATH, TEXT("%hs"), initialDir.c_str());
    // 初期ファイル名を設定
    TCHAR tchFileName[MAX_PATH];
    _stprintf_s(tchFileName, MAX_PATH, TEXT("%hs"), initialFile.c_str());
 
    // ダイアログの設定
    OPENFILENAME ofn;
    ZeroMemory(&ofn, sizeof(ofn));
    ofn.lStructSize = sizeof(ofn);
    ofn.hwndOwner = NULL;
    //拡張子のフィルター
    ofn.lpstrFilter = TEXT("csv(*.csv)\0*.csv\0All files(*.*)\0*.*\0");
    ofn.nFilterIndex = 1;
    ofn.lpstrFile = tchFileName;
    ofn.nMaxFile = sizeof(tchFileName);
    ofn.lpstrInitialDir = tchInitialDir;
    ofn.Flags = OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_EXPLORER | OFN_HIDEREADONLY;
    ofn.lpstrTitle = TEXT("ファイルを開く");
    ofn.lpstrDefExt = TEXT("csv");
 
    // ダイアログを表示
    BOOL resDlg = GetOpenFileName(&ofn);
    if (resDlg == 0) { return "";}
 
    // TCHAR型の文字列をchar型の文字列に変換
    char chFileName[MAX_PATH];
#ifdef _UNICODE
    sprintf_s(chFileName, MAX_PATH, "%ls", tchFileName);
#else
    sprintf_s(chFileName, MAX_PATH, "%hs", tchFileName);
#endif
 
    // ダイアログを表示すると作業ディレクトリが変更されるので、元に戻す
    SetCurrentDirectory(oldCurrentDir);
 
    return chFileName;
}

サポートサイト Wikidot.com