環境:Visual C++6.0 WindowsXP
ひらがなを含む文字列操作で嵌っています。
文字列からファイル名を除く処理
<具体例>
c:\tete\ひらがなフォルダ\aaaa.txt から
c:\tete\ひらがなフォルダを取り出したい。
を行いたいのでが、下記関数ではうまくいきません。
理由は文字列処理をchar型でやっているためだとわかっているのですが、ひらがなを含
む場合にはどのようにやればよろしいのでしょうか? 下記関数でひらがなを含まない
場合には正しく動作することを確認済みです。
WCHARにすればうまくいくのか??
いろいろ悩みましたが良案が浮かばないためアドバイスお願いします。
コードは
main関数で{
CString fname = c:\tete\ひらがなフォルダ\aaaa.txt;
CString m_CurentDir = GetCurrentDir(fname);
}
CString CRAW_CalDlg::GetCurrentDir(CString fname)
{
LPTSTR p = fname.GetBuffer(256);
int len = strlen(p);
int i,j;
char tete_fname[256];
CString Cfname;
i=0;
while( p[len - i-1] != '\\'){
i++;
}
i++;
for(j=0; i < len; i++,j++){
tete_fname[j] = p[len - i-1];
}
tete_fname[j] = '\0';
fname.ReleaseBuffer();
Cfname = tete_fname;
Cfname.MakeReverse();
return(Cfname);
}
すみません
変数の初期化のところで\が正しく認識されませんね。
訂正させてください。
誤:CString fname = c:\tete\ひらがなフォルダ\aaaa.txt;
訂:CString fname = c:\\tete\\ひらがなフォルダ\\aaaa.txt;
splitpath ぢゃだめ?
つ PathRemoveFileSpec
# shlwapi.libの追加が必要
>tetrapod様
アドバイスありがとうございます。
私がやりたかったことはsplitpathで簡単に実現できるのですね。
ありがとうございました。
>>nori様
PathRemoveFileSpec なんてすばらしい関数があるのですので。
教えてくださりありがとうございました。
最初のコードは反転前の文字列を返していませんか?
return(Cfname);
↓
return Cfname.MakeReverse();
>最初のコードは反転前の文字列を返していませんか?
VC6.0なので反転していると思いますが・・
[VC6.0]
CString::MakeReverse
void MakeReverse( );
[VC2005]
CStringT::MakeReverse
CStringT& MakeReverse();
失礼しました。vc6.0でしたね。
ご指摘ありがとうございます。
VC6のときは戻り値がなくて、2005なら戻り値があるが
MakeReverseを呼べば、本体の順番が入れ替わるという動作するのは
どっちも変わらないのでは?
VC2008になりますが、本体側も反転していますね。
勘違いしていました。
それと、VC2008ではマルチバイト文字セット、ユニコードともに
c:\\tete\\ひらがなフォルダをMakeReverse()で正しく反転できました。