我需要从filename获取扩展名并将其与我的扩展数组进行比较。但看起来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
吗?因为这种类型有很多麻烦。他们什么时候练习?
答案 0 :(得分:5)
您可以使用PathFindExtension
Windows API函数(因为您显然是使用已发布的代码编写Windows代码)。这是shlwapi.dll
,因此您需要#include <shlwapi.h>
并将项目与shlwapi.lib
相关联。
它返回指向文件扩展名开头的'.'
的指针,因此您只需将此指针传递给字符串比较函数_wcsicmp
即可进行比较。
顺便说一下,TCHAR
是一个扩展为char
或wchar_t
的宏,具体取决于您的项目是为ANSI还是Unicode构建的。它不是一个类,也没有方法,TCHAR
数组只是一个字符数组。
答案 1 :(得分:3)
TCHAR
个版本:tcsstr
; TCHAR
已经过时,使用char/wchar_t
,甚至更好 - std::string/std::wstring
; .
个符号,因此使用字符串搜索例程似乎有点矫枉过正。只需在字符串中找到最后一个点,并将字符串指针增加到其索引。您将获得具有文件扩展名的子字符串。 答案 2 :(得分:2)
create table foo (id number, str varchar2(10));
create table bar (id number, num number);
insert all
into foo(id, str) values(1, 'foo one')
into foo(id, str) values(2, 'foo two')
into bar(id, num) values(1, 100)
into bar(id, num) values(2, 200)
select 1 from dual;
select foo.id, foo.str as foo_str, bar.num as bar_num
from foo
inner join bar on bar.id = foo.id
;
或使用Windows API PathFindExtension。
如何比较 - std::wstring::compare
有关使用TCHAR的信息,请参阅this 简短:不要使用它。