从TCHAR数组中获取文件扩展名
Get file extension from TCHAR array?
我需要从文件名获得扩展名,并将其与扩展名数组进行比较。但是看起来TCHAR
没有strpos()
类似的功能,所以我正在行走TCHAR
的数组(不是最好的解决方案?)来搜索'.'
符号并提取文件扩展名。但是它不工作。
for (int i = 0; i < extCount; i++)
{
//wsprintf(fileName, L"%d", extCount);
//_tcscpy_s(fileName, extensions[i]);
_tcscpy_s(fileName, fileData.cFileName);
for (int k = wcslen(fileName); k >= 0; k--)
{
if (fileName[k] == (LPCWSTR)TCHAR('.'))
{
wsprintf(temp, L"%c", fileName[k]);
MessageBox(NULL, fileName[k], L"Файл", MB_OK);
}
}
那么问题是,如何以最简单和最有效的方式获取和比较文件扩展名?另一个问题是,我真的应该用TCHAR
吗?因为这种类型有很多麻烦。他们什么时候练习?
您可以使用PathFindExtension
Windows API函数(因为您显然是从您发布的代码为Windows编码)。这是在shlwapi.dll
,所以你需要#include <shlwapi.h>
和链接你的项目与shlwapi.lib
。
它返回一个指向文件扩展名开头的'.'
的指针,所以你可以把这个指针传递给像_wcsicmp
这样的字符串比较函数来比较它。
顺便说一下,TCHAR
是一个宏,扩展到char
或wchar_t
,具体取决于您的项目是为ANSI还是Unicode构建的。它不是一个类,也没有方法,TCHAR
数组只是一个字符数组。
- 此功能有
TCHAR
版本:tcsstr
; -
TCHAR
是相当过时的东西,使用char/wchar_t
,或者更好-std::string/std::wstring
代替; - 文件名可能包含许多
.
符号,因此使用字符串搜索例程似乎是多余的。简单地定位最后一个点在你的字符串和增量字符串指针到它的索引。您将获得具有文件扩展名的子字符串。
std::wstring GetLastExtension(const std::wstring &fileName)
{
auto pos = fileName.rfind(L".");
if (pos == std::wstring::npos)
pos = -1;
return std::wstring(fileName.begin() + pos, fileName.end());
}
或者使用Windows API PathFindExtension
如何比较- std::wstring::compare
查看有关使用TCHAR的信息。
短:不要用
相关文章:
- 如何按文件扩展名引用文件夹中的文件
- 谁能告诉我,程序中的错误是什么?该程序仅用于获取文件扩展名
- 通过cMake使用具有自定义文件扩展名的共享库
- 在另一个字符串中插入文件扩展名之前的字符串
- 如何在不使用文件扩展名的情况下使用命令行参数打开C++中的文本文件?
- Eclipse CDT:传递具有相同文件扩展名的多个程序参数
- 将C 代码桥接到我的Swift代码中.哪些文件扩展名为XCode中的基于C的语言
- 如何打开并显示C 中任何文件扩展名的文件
- 循环浏览所有项目,其中QTREEVIEW QFILESYSTEMMODEL上具有所需的文件扩展名
- 如何调用 ShellExecute 以使用 C++ 打开具有特定程序的文件,而无需关联相同的文件扩展名
- 用户定义的C 文件扩展名,用于G 汇编
- 如何在 INFLATE 后获取原始文件扩展名
- CMake:如何仅将特定文件扩展名从一个目录复制到另一个目录
- 获取文件扩展名
- 共享库的TX文件扩展名
- 如何创建一个不敏感的正则态度以匹配文件扩展名
- 如何更改QT上的文件扩展名
- 列出 OpenCV 支持的文件扩展名
- 如何避免 CFile查找文件扩展名超过三个字符的误报
- C++模板实现文件扩展名约定