ページ 11

フルパスからファイル名を抜き出す

Posted: 2005年6月08日(水) 22:07
by Vitalstar
初めまして。最近サイトを設立したVitalstarです。
早速質問があるのですが、タイトルの通り、フルパスから
ファイル名を抜き出したいと思い、下のように
_splitpathを利用したコードを作りました。
しかし、うまくいきません。どなたか、解決策を知っている人が
いらっしゃったら、意見をお願いします。

Dim buffer As String
Dim drive As String
Dim path As String
Dim filename As String
Dim ext As String
Dim name As String

(ここにファイル選択ダイアログを表示するコードが入ります)

_splitpath(buffer,drive,path,filename,ext)
name=filename+ext


ちなみに、_splitpath自体は、デバッグで確認したところ、
うまく行っているようなので、ファイル名と拡張子の連結
部分に問題があるようです。

原因はわかりませんが…

Posted: 2005年6月08日(水) 23:31
by k2
lstrcpyやlstrcat関数を使ってみたらどうでしょうか?
具体的には、

name=filename+ext

の行を

lstrcpy(name,filename)
lstrcat(name,ext)

のようにしてみるといいと思います。

うまくいきました

Posted: 2005年6月09日(木) 07:04
by Vitalstar
k2さんのようにしてやってみたところ、エラーは発生しませんでした。
解決策を教えていただき、ありがとうございました。
また、質問することがあったら、お世話になりたいと思います。

Posted: 2005年6月09日(木) 12:38
by イグトランス
ところで_splitpathの結果が返ってくるほうの引数にString型の変数を渡しているようですが、
その前にちゃんとZeroString()などは行っていますか?
ZeroStringなどで結果を入れるところを用意していない場合それはたまたま動いているというだけで、正しいプログラムとは言えません。

そもそもファイル選択ダイアログで選択されたファイルパスからファイル名と拡張子を抜き出したいだけなら、
_splitpathを使わなくても、ofn.lpstrFile + ofn.nFileOffsetとするだけで十分です。
これはBytePtr型ですが、MakeStr関数を使えばString型の文字列になります。

詳しい解説をありがとうございました

Posted: 2005年6月09日(木) 21:55
by Vitalstar
>>イグトランスさん

詳しい解説をありがとうございました。
とても参考になります。
また、お世話になると思いますが、そのときはよろしくお願いします。