2010-10-18 80 views
1

我已經穿過一個TCHAR szFileName[]變量,它包含有類似C:\app\...\Failed\C++ TCHAR []串

我想通過它進行排序接收的路徑這種方法,所以我可以驗證,如果最後一個文件夾的名稱在該路徑實際上,「失敗」

我認爲,使用像這樣的工作:

std::wstring Path = szFileName; 

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

,但我得到了以下錯誤:

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)

不用說,我對C++很陌生,我一直在尋找一個答案,但我沒有任何運氣,所以任何幫助將不勝感激:)

回答

7

要麼你始終使用wstring(寬字符變體)或string(「正常」變體)。

既然你得到一個TCHAR(它可以是wchar_tchar,這取決於編譯器標誌),相應的類型使用將是一個tstring,但不存在。但是,您可以定義一個typedef吧:

typedef std::basic_string<TCHAR> tstring; 

現在你可以一直使用相同的字符串類型,tstring,您的所有操作。

+0

對不起,但我不完全明白那裏發生了什麼。 我應該這樣做: \t std :: tstring Path = szFileName; '因爲如果是這樣,那麼我得到以下錯誤: 'tstring':不是'std'的成員 – hikizume 2010-10-18 11:27:37

+1

你自己定義了'tstring',它不在名字空間'std'中,所以當你使用它,不要用'std ::'加前綴。 – 2010-10-18 11:29:20

+0

它似乎工作,但爲什麼我得到一個錯誤「初始化」:當我嘗試時,無法從'std :: basic_string <_Elem,_Traits,_Ax>'轉換爲'std :: basic_string <_Elem,_Traits,_Ax>''使用substr將一部分初始字符串存儲在另一個字符串中? – hikizume 2010-10-18 11:37:06

3

dirpath2也必須是std::wstring。有兩種方法可以在兩者之間進行轉換,但是它們涉及到更改字符編碼,並且看起來比您要求的要多。

我喜歡不使用TCHAR。今天,很少需要啓用或禁用UNICODE宏,並創建程序的ASCII和Unicode版本。總是使用wstring,wchar_t,以及以'W'結尾的Windows API函數。

如果你正在研究一些你無法控制的問題,康拉德的typedef答案比我的更實用。