0

パス文字列からファイル名を抽出したいのですが、GetFullPathName 関数に問題があります。

WCHAR *fileExt;
WCHAR szDir[256]; //dummy buffer
GetFullPathNameW(g_fileName,256, szDir,&fileExt); //g_filename is filename with path string
swprintf(szDestDir, L"C:\\Example\\%s", fileExt);
MessageBoxW(hwnd,szDestDir,L"Debug",MB_OK); //debug message

メッセージ ボックスに "C:\Example\0" が表示されるたびに、"text.txt" などのファイル名の代わりに 0 が表示されます。

4

1 に答える 1

3

簡単にするために、コードを少し変更しました。

#include <Windows.h>
#include <stdio.h>

int main(int argc, char **argv) { 
    char *fileExt;
    char szDir[256]; //dummy buffer
    GetFullPathName(argv[0], 256, szDir, &fileExt); 
    printf("Full path: %s\nFilename: %s", szDir, fileExt);
    return 0;
}

独自のソース コードで実行したところ、次の結果が得られました。

C:\C\source>trash9 trash9.cpp
Full path: C:\C\source\trash9
Filename: trash9

そうは言っても、なぜあなたが台無しにするのか不思議に思う必要がありますGetFullPathName。コメントで、ファイル名を取得していると言っていますGetOpenFileNameOPENFILENAMEこれは、構造体でファイル情報を取得していることを意味します。これにはlpstrFile、ファイルへの完全なパスを持つ と、lpstrFileTitleパス情報のないファイル名を持つ の両方が含まれます。まさにあなたが望むものです。

于 2013-07-13T17:02:09.090 に答える