2010-10-18 6 views
1

Je cette méthode qui reçoit un chemin à travers une variable TCHAR szFileName[], qui contient quelque chose comme C:\app\...\Failed\C++ TCHAR [] à chaîne

Je voudrais trier ce que je peux vérifier si le nom du dernier dossier sur ce chemin est en fait, « Échec »

Je pensais que l'utilisation de quelque chose comme ça fonctionnerait:

std::wstring Path = szFileName; 

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

Mais je reçois l'erreur suivante:

Error 6 error C2679: binary '=' : no operator found which takes a right-hand operand of type 'std::basic_string<_Elem,_Traits,_Ax>' (or there is no acceptable conversion)

Inutile de dire que je suis très nouveau pour C++, et je cherchais une réponse pendant un certain temps maintenant, mais je ne l'ai pas eu de chance, de sorte que toute aide serait appréciée :)

Répondre

7

Soit vous utilisez uniformément wstring (la variante de caractères larges) ou string (la variante "normale").

Puisque vous obtenez un TCHAR (qui peut être wchar_t ou char, selon les drapeaux du compilateur), le type approprié d'utiliser serait un tstring, mais cela n'existe pas. Cependant, vous pouvez définir un typedef pour elle:

typedef std::basic_string<TCHAR> tstring; 

Maintenant, vous pouvez toujours utiliser le même type de chaîne, tstring, pour toutes vos opérations.

+0

Je suis désolé mais je ne comprends pas très bien ce qui se passe là-bas. suis-je censé faire quelque chose comme: \t std :: tstring Path = szFileName; Parce que si oui, alors j'obtiens l'erreur suivante: 'tstring': n'est pas un membre de 'std' – hikizume

+1

Vous définissez 'tstring' vous-même, et ce n'est pas dans l'espace de noms' std' donc quand vous utilisez-le, ne le préfixez pas avec 'std ::'. –

+0

il semble fonctionner mais pourquoi ai-je une erreur "initialisation": impossible de convertir 'std :: basic_string <_Elem, _Traits, _Ax>' en 'std :: basic_string <_Elem, _Traits, _Ax>' "quand j'essaye utiliser substr pour stocker une partie de la chaîne initiale sur une autre chaîne? – hikizume

3

dirpath2 doit également être un std::wstring. Il existe des moyens de convertir entre les deux, mais ils impliquent de changer l'encodage des caractères et cela semble être plus que ce que vous demandez. J'aime ne pas simplement utiliser TCHAR

Aujourd'hui, il est rarement nécessaire d'activer ou de désactiver les macros UNICODE et de créer à la fois une version ASCII et une version Unicode d'un programme. Utilisez simplement toujours wstring, wchar_t et les fonctions API Windows qui se terminent par 'W'.

Si vous travaillez sur quelque chose où vous n'avez pas de contrôle sur ce qui précède, la réponse typedef de Konrad est plus pratique que la mienne.