如何使用 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

获取文件的绝对路径

如何使用 tar 提取没有文件夹结构的文件

如何在没有查询的情况下在 Retrofit 中提取 Json 数据