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(「通常の」バリアント) を使用しています。

(コンパイラ フラグに応じてまたはのTCHARいずれかになります) を取得しているため、使用する適切な型は a になりますが、それは存在しません。ただし、そのための typedef を定義できます。wchar_tchartstring

typedef std::basic_string<TCHAR> tstring;

tstringこれで、すべての操作で同じ文字列型 を一貫して使用できるようになりました。

于 2010-10-18T11:13:17.937 に答える
3

dirpath2std::wstring同様である必要があります。2つの間で変換する方法はありますが、文字エンコードを変更する必要があり、それはあなたが求めている以上のように思えます。

私は単にTCHARを使わないのが好きです。今日では、UNICODEマクロを有効または無効にし、プログラムのASCIIバージョンとUnicodeバージョンの両方を作成する必要があることはめったにありません。常に、、、および「W」で終わるWindowsAPI関数を使用wstringwchar_tてください。

上記を制御できない何かに取り組んでいる場合、コンラッドのtypedef答えは私のものよりも実用的です。

于 2010-10-18T11:26:25.137 に答える