1

我有这个方法,它通过一个TCHAR szFileName[]变量接收路径,其中包含类似C:\app\...\Failed\

我想对其进行排序,以便验证该路径上最后一个文件夹的名称是否实际上是“失败”

我认为使用这样的东西会起作用:

std::wstring Path = szFileName;

string dirpath2;
dirpath2 = Path.substr(0,5); 

但我收到以下错误:

错误 6 错误 C2679:二进制“=”:未找到采用“std::basic_string<_Elem,_Traits,_Ax>”类型的右侧操作数的运算符(或没有可接受的转换)

不用说,我对 C++ 很陌生,我一直在寻找答案一段时间,但我没有任何运气,所以任何帮助将不胜感激:)

4

2 回答 2

7

您要么一直使用wstring(宽字符变体)或string(“正常”变体)。

由于您得到 a TCHAR(可以是wchar_tchar,具体取决于编译器标志),因此要使用的适当类型是 a tstring,但不存在。但是,您可以为其定义 typedef:

typedef std::basic_string<TCHAR> tstring;

现在,您可以在所有操作中始终使用相同的字符串类型 , tstring

于 2010-10-18T11:13:17.937 回答
3

dirpath2也必须是一个std::wstring。有多种方法可以在两者之间进行转换,但它们涉及更改字符编码,这似乎超出了您的要求。

我喜欢不使用 TCHAR。今天,很少需要启用或禁用 UNICODE 宏并创建 ASCII 和 Unicode 版本的程序。只需始终使用wstringwchar_t和以“W”结尾的 Windows API 函数。

如果您正在处理无法控制上述内容的事情,那么康拉德的typedef回答比我的更实际。

于 2010-10-18T11:26:25.137 回答