人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

フルパスを用い全角半角を含むファイル名を取得する方法を教えてください(VC++6,Windows2000)
フルパスからファイル名を取得する際にstrrchrを用い後ろから\\を検索し、その位置から
ファイル名を取得する処理を作成しましたが、全角のファイル名(例:産能大学.txt)のときに正しくファイル名を取得できないケースがあります。二バイト表現の文字の中に\\があるということでしょうか?
良いファイル名取得方法がありましたら教えてください。

『参考ソース』
if(NULL==(cMark=strrchr(cTempPath,'\\'))){



●質問者: harunoharuno
●カテゴリ:コンピュータ 趣味・スポーツ
✍キーワード:txt VC++ Windows2000 ソース バイト
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● ToMmY
●25ポイント

全角を有効にして取得してますか?

\\表現はないですけどオプションと取得方法と変数をw_char使わないとまずいと思いますよ

http://www.dinop.com/vc/unicode.html

◎質問者からの返答

回答ありがとうございます。

マルチバイト文字として扱うにはw_char

で宣言をするのですね。

すでにたくさんcharで宣言しているため、

w_charに修正するのはちょっと難しいそうです。


2 ● しおり
●36ポイント ベストアンサー

基本的に、Shift JIS 等マルチバイト系の文字コードで、後ろから検索してはいけません。

(大丈夫な文字コードもありますが)

本件の場合は、_splitpath を使うのが簡単だと思います。

http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja...

ちなみに、例で示されている"産能大学.txt"の場合は、"能"の2バイト目が'\\'ですね。

◎質問者からの返答

回答ありがとうございます。

今回の問題はBookmarkerさんから

教えていただいた方法で対処しました。

>Shift JIS 等マルチバイト系の文字コードで、後ろから検索してはいけません。

そうですね。同じ失敗をしないように心がけます。


3 ● kurukuru-neko
●36ポイント

MS漢字コード(通称シフトJIS)の_MBCS環境で

コンパイルしていると思います。

漢字コードの2バイト目が5Cの場合正常処理できません。

_splitpath関数を使う方法、アプリをUNICODE対応にする

TCHARを使う方法などがあります。

http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja...

strrchrを使いたい場合は、_MBCSを定義するか

_mbstrrchrを使う

http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja...

MBCS/UNICODEについて

http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja...

◎質問者からの返答

回答ありがとうございます。

_mbstrrchrを用いて・・・検索できるのですか?

半角・全角入り混じった中から、『全角の※※

を探す』などができたら理想ですね。

試してみたいと思います。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ