我有这种方法接收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 ++很陌生,而且我一直在寻找答案,但我没有任何运气,所以任何帮助都会受到赞赏:)
答案 0 :(得分:7)
您要么始终使用wstring
(宽字符变体)或string
(“普通”变体)。
由于您获得TCHAR
(可以是wchar_t
或char
,具体取决于编译器标志),因此要使用的相应类型为tstring
,但那不存在。但是,您可以为它定义typedef:
typedef std::basic_string<TCHAR> tstring;
现在,您可以始终对所有操作使用相同的字符串类型tstring
。
答案 1 :(得分:3)
dirpath2
也必须是std::wstring
。有两种方法可以在两者之间进行转换,但它们涉及更改字符编码,这似乎比您要求的更多。
我喜欢不使用TCHAR。今天,很少需要启用或禁用UNICODE宏并创建程序的ASCII和Unicode版本。只需始终使用wstring
,wchar_t
以及以“W”结尾的Windows API函数。
如果您正在处理无法控制上述内容的事情,Konrad的typedef
答案比我的更为实用。