【问题标题】:How to extract the file name without folder path with GetFullPathName如何使用 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

标签: c winapi filenames


【解决方案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 -- 正是您想要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-20
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    相关资源
    最近更新 更多