1

私はC ++の初心者であり、ファイルを開くダイアログから選択したファイルのディレクトリを取得する方法が簡単にわかりません。標準関数を使用しようとしています。私の場合は GetFullPathName です。それが私がやろうとしている方法です:

OPENFILENAME ofn;       // common dialog box structure
char szFile[260];       // buffer for file name
HANDLE hf;              // file handle
// Initialize OPENFILENAME
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hWnd;
ofn.lpstrFile = szFile;
// Set lpstrFile[0] to '\0' so that GetOpenFileName does not 
// use the contents of szFile to initialize itself.
ofn.lpstrFile[0] = '\0';
ofn.nMaxFile = sizeof(szFile);
//ofn.lpstrFilter = "All\0*.*\0Text\0*.TXT\0";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;

// Display the Open dialog box. 

if (GetOpenFileName(&ofn) == TRUE)
    hf = CreateFile(ofn.lpstrFile,
    GENERIC_READ,
    0,
    (LPSECURITY_ATTRIBUTES) NULL,
    OPEN_EXISTING,
    FILE_ATTRIBUTE_NORMAL,
    (HANDLE) NULL);


char buffer[MAX_PATH];
char *buffer2[MAX_PATH];
GetFullPathName(ofn.lpstrFile,
    ofn.nMaxFile,
    buffer,
    buffer2);

//PathRemoveFileSpec(ofn.lpstrFile);
MessageBox(hWnd, buffer, "Tutorial", 0); // and show the path
4

1 に答える 1

1

戻ると、選択されたファイルは、メンバーGetOpenFileName()を介して提供されたバッファーに格納されます。lpstrFileこれはファイルへのフル パスです (例: C:\Path\To\File.txt )。

ファイルが入っているフォルダーを取得するには、最後のコンポーネントを取り除くだけです。これを手動で行うには、文字列を逆方向に検索して最後のバックスラッシュ文字を探すか、ユーティリティ関数の 1 つを使用して行います。

char chFolderPath[MAX_PATH];
StringCchCopy(chFolderPath, MAX_PATH, ofn.lpstrFile);
PathRemoveFileSpec(chFolderPath);
// chFolderPath now contains "C:\Path\To"

この機能を使用するには、#include <shlwapi.h>とリンクする必要があることに注意してください。shlwapi.libPathRemoveFileSpec

于 2013-08-16T04:34:13.813 に答える