如何在VS 2010中使用GetExtension

How to use GetExtension in VS 2010

本文关键字:GetExtension 2010 VS      更新时间:2023-10-16

我是 c/c++ 的初学者,找到这个来获取文件的后缀,这个来获取文件名,我必须使用这些方法,但我无法运行这些页面中的示例

这是我的职能

void Myfunc(char* filename)
{   
    cout<<GetExtension(filename);
}

错误是"GetExtension"未定义

请帮助我获取我的文件后缀和名称:)

谢谢

有许多方法可以从路径名获取扩展。

一种方法是使用shlwapi.dll中找到的功能。 您正在寻找的功能是 PathFindExtensionA .

下面的代码假设你使用的是 Visual Studio:

#include <shlwapi.h>
#include <iostream>
#pragma comment(lib,"shlwapi.lib")
//...
void Myfunc(char* filename)
{   
    std::cout << PathFindExtensionA(filename);
}
int main()
{
    Myfunc("TestFile.exe");
}

使用 PathFindExtensionA 的原因是由于您使用了 ANSI(字符 *)文件名。

请参阅以下链接:https://msdn.microsoft.com/en-us/library/bb773587%28VS.85%29.aspx

基本上,PathFindExtension使用TCHAR作为字符类型。 根据Visual Studio项目的生成设置(同样,我假设你使用的是Visual Studio),生成将是MBCS生成或Unicode生成。 因此,除非您的字符串类型是 TCHAR 数组,否则您无法可靠地调用PathFindExtension,除非您知道调用使用哪种标准字符类型。

如果构建是 UnicodePathFindExtension将使用宽字符串,因此您要使用的指针类型是 wchar_t* 而不是 char* 。 如果构建是 MBCS ,则指针类型为 char* 而不是 wchar_t* 。 是的,它令人困惑,但这就是它归结为的原因。

因此,为了确保使用正确的函数,无论构建类型如何,您要么调用 PathFindExtensionA 进行char*,要么PathFindExtensionW调用 wchar_t*

如今,MBCS版本变得越来越罕见,因为Windows默认采用Unicode,所以我的建议是采用Unicode并使用宽字符串。

原始错误的原因是,您看到打印了一些十六进制数字而不是扩展名,PathFindExtension返回了一个wchar_t*,而不是一个char*。 由于std::cout的运算符<<不知道如何处理字符串数据方面的wchar_t*,它唯一的其他选择是输出指针值(即您看到的十六进制值)。