如何使用 GetFullPathName 提取没有文件夹路径的文件名
Posted
技术标签:
【中文标题】如何使用 GetFullPathName 提取没有文件夹路径的文件名【英文标题】:How to extract the file name without folder path with GetFullPathName 【发布时间】:2013-07-13 16:36:56 【问题描述】:我想从路径字符串中提取文件名,但 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”时,都会用 0 代替文件名,例如“text.txt”。
【问题讨论】:
你的测试用例中 g_fileName 的内容是什么? 代码有效。您的 szDestDir 是否有足够的空间来保存输出? g_fileName 是来自打开文件对话框的 LPCWSTR,szDestDir 分配了 256 个字符。 确保仔细检查所有内容。以下程序有效:pastebin.com/rWbhAwxn 【参考方案1】:为了简单起见,我稍微修改了您的代码:
#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
搞混。在 cmets 中,您说您正在获取文件名 GetOpenFileName
。这意味着您在OPENFILENAME
结构中获取文件信息。这包括具有文件完整路径的lpstrFile
和具有不带路径信息的文件名的lpstrFileTitle
-- 正是您想要的。
【讨论】:
以上是关于如何使用 GetFullPathName 提取没有文件夹路径的文件名的主要内容,如果未能解决你的问题,请参考以下文章
WinAPI 中的 GetLongPathName 和 GetFullPathName 有啥区别?
访问 django 管理页面时出错,如下所示 - TypeError at /admin/login/ _getfullpathname: 路径参数的非法类型
matplotlib.pyplot import报错: ValueError: _getfullpathname: embedded null character in path