2013-07-13 2 views
-1

Я хочу, чтобы извлечь имя файла из строки пути, но у меня есть трудности с GetFullPathName Функция:Как извлечь имя файла без пути к папке с 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: \ Пример \ 0 "с 0 вместо имени файла, например" text.txt ".

+0

Что такое g_fileName в тестовом примере? – junix

+0

Код работает. У вашего szDestDir достаточно места для хранения вывода? – typ1232

+0

g_fileName - это LPCWSTR из диалогового окна открытого файла, а szDestDir - 256 символов. – peterooch

ответ

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. В комментариях, которые вы говорите, вы получаете имя файла GetOpenFileName. Это означает, что вы получаете информацию о файле в структуре OPENFILENAME. Это включает в себя как lpstrFile, который имеет полный путь к файлу, так и lpstrFileTitle, который имеет имя файла без информации о пути - именно то, что вам кажется.

Смежные вопросы