如何在VS 2010中使用GetExtension
How to use GetExtension in VS 2010
我是 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
,除非您知道调用使用哪种标准字符类型。
如果构建是 Unicode
,PathFindExtension
将使用宽字符串,因此您要使用的指针类型是 wchar_t*
而不是 char*
。 如果构建是 MBCS
,则指针类型为 char*
而不是 wchar_t*
。 是的,它令人困惑,但这就是它归结为的原因。
因此,为了确保使用正确的函数,无论构建类型如何,您要么调用 PathFindExtensionA
进行char*
,要么PathFindExtensionW
调用 wchar_t*
。
如今,MBCS版本变得越来越罕见,因为Windows默认采用Unicode,所以我的建议是采用Unicode并使用宽字符串。
原始错误的原因是,您看到打印了一些十六进制数字而不是扩展名,PathFindExtension
返回了一个wchar_t*
,而不是一个char*
。 由于std::cout
的运算符<<
不知道如何处理字符串数据方面的wchar_t*
,它唯一的其他选择是输出指针值(即您看到的十六进制值)。
- 无法在 Visual Studio 2010 中构建 Allegro C++ 程序
- Visual Studio 2013,错误 MSB8020:找不到 Visual Studio 2010 的生成工具
- VisualC++ 2010 有没有办法找出有关未处理异常错误的更多详细信息
- 双线程应用比单线程应用慢 C++ (VC++ 2010 Express).如何解决?
- std::array initalization with Visual Studio 2010
- MSVC 2010 编译应用程序和 MSVC 2019 编译应用程序之间的行为差异
- 将代码从 32 位迁移到 64 位时出现问题 Visual Studio 2010
- 在 Visual Studio 2010(及更高版本)中定义包含或链接路径变量的位置
- Visual Studio 2010 单元测试:无法识别引用的项目类
- Visual Studio 2010 - C++ 致命错误 LNK1120: 1 个未解析的外部
- VisualStudio 2015 链接器查找 VS 2010 库
- C /FORTRAN项目由Visual Studio 2010/Intel 2013创建,将不会在Visual St
- 如何使 Visual Studio 2010 警告未使用的变量
- 如何解决错误 C2719 在 Visual Studio 2010 C++ 中不存在代码行时
- 代码 c++ VS 2010 中的 LPCWSTR 到字符串转换问题
- 按值传递的参数在 Visual Studio 2010, C++ 的调试器中显示为通过引用传递
- Visual Studio 2010 是否执行零初始化
- 从另一个CPP文件访问Form1的文本框,Visual C 2010
- 无法使用 Visual Studio 2010 和 Qt 版本 4.8.0 创建"Qt Gui Application"
- 如何在VS 2010中使用GetExtension