_splitpathを使ってファイル名を取得したいのですが、下のようにコーディングしても
fnameにファイル名が帰ってきません。どなたか、正しい_splitpath関数の使い方
をお教え願えないでしょうか?
-----------------------------------------------------------------------------
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
SetTimer(hMainWnd,1,1,AddressOf(fff) As DWord) 'タイマーの設定
_splitpath()関数を使用してファイル名(下の例では、)
End Sub
Sub fff()
dim fpath As BytePtr
dim drv As BytePtr
dim path As BytePtr
dim fname As BytePtr
dim ext As BytePtr
dim f as string
KillTimer(hMainWnd,1)
f="D:\test\test.pdf"
fpath=VarPtr(f)
_splitpath(fpath,drv,path,fname,ext)
MessageBox(hMainWnd,fname,"testcode",MB_OK)
End sub
-------------------------------------------------------------
_splitpathが動きません
まずString型の文字列から,その文字列への(BytePtr型の)ポインタを取り出すにはVarPtrではなく,StrPtrを用います。
そして_splitpathは結果を受け取るほうの引数に対してWindows APIと同様に,
BytePtr型の変数ではなく,Byte型の配列を指定してやる必要があります。
というわけで,こうしたらどうでしょうか。
そして_splitpathは結果を受け取るほうの引数に対してWindows APIと同様に,
BytePtr型の変数ではなく,Byte型の配列を指定してやる必要があります。
というわけで,こうしたらどうでしょうか。
コード: 全て選択
Sub fff()
dim drv[2] As Byte
dim path[255] As Byte
dim fname[255] As Byte
dim ext[63] As Byte
dim f As String
KillTimer(hMainWnd, 1)
f = "D:\test\test.pdf"
_splitpath(StrPtr(f), drv, path, fname, ext)
MessageBox(hMainWnd, fname, "testcode", MB_OK)
End Sub
Re: 超初心者でご面倒をおかけしますが、
イグトランス (egtra)さん
大変ありがとうございました。完璧に動きました。m(--)m
基本的なことがわかっていませんでした。何となくVarPtrではまずいかな?とか_splitpathの変数の指定の仕方が悪いだろうとうは思っていたのですが...^^);
それから、拡張子のext[63]は、きっとどこかに63+1バイトの制限があるのでしょうね。
大変役に立ちました。今後ともどうぞよろしくお願いいたします。
大変ありがとうございました。完璧に動きました。m(--)m
基本的なことがわかっていませんでした。何となくVarPtrではまずいかな?とか_splitpathの変数の指定の仕方が悪いだろうとうは思っていたのですが...^^);
それから、拡張子のext[63]は、きっとどこかに63+1バイトの制限があるのでしょうね。
大変役に立ちました。今後ともどうぞよろしくお願いいたします。
Re:_splitpathが動きません
イグトランス (egtra)さん。コメントありがとうございました。
ext(63)が何となく気になったのでWebで調べてみましたら、以下のような記述が見つかりました。
これから推察すると、OSによって拡張子のサイズが決まってしまう様な感じがしました。
"c:\a.01234567890abc ~"の様なファイル名も存在する可能性があるのでしょうか?
大変勉強になりました。今後ともよろしくお願い致します。
--------------------------------------------------------------------------
とりあえずそれがどのような値を持つのか、実際に表示させてみました。私の環境(Windows2000 SP1)では
* _MAX_DIR: 256
* _MAX_DRIVE: 3
* _MAX_EXT: 256
* _MAX_FNAME: 256
* _MAX_PATH: 260
---------------------------------------------------------------------------
ext(63)が何となく気になったのでWebで調べてみましたら、以下のような記述が見つかりました。
これから推察すると、OSによって拡張子のサイズが決まってしまう様な感じがしました。
"c:\a.01234567890abc ~"の様なファイル名も存在する可能性があるのでしょうか?
大変勉強になりました。今後ともよろしくお願い致します。
--------------------------------------------------------------------------
とりあえずそれがどのような値を持つのか、実際に表示させてみました。私の環境(Windows2000 SP1)では
* _MAX_DIR: 256
* _MAX_DRIVE: 3
* _MAX_EXT: 256
* _MAX_FNAME: 256
* _MAX_PATH: 260
---------------------------------------------------------------------------
ちなみに、ですが。
WindowsXPにおいて、3文字より多い拡張子は一般的なものでも数種類あります。
例:*.java,*.class,*.html,*.jpeg,*.text,*.mhtml*.midi,*.mpeg,*.wave 等。
6文字以上の奴はなかなか見ませんので、10文字分くらいあれば十分じゃないかと。
追記
APPLE社の付ける拡張子はやたら長いということが判明。
例:*.framework,*.preference 等。
WindowsXPにおいて、3文字より多い拡張子は一般的なものでも数種類あります。
例:*.java,*.class,*.html,*.jpeg,*.text,*.mhtml*.midi,*.mpeg,*.wave 等。
6文字以上の奴はなかなか見ませんので、10文字分くらいあれば十分じゃないかと。
追記
APPLE社の付ける拡張子はやたら長いということが判明。
例:*.framework,*.preference 等。
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
Re:_splitpathが動きません
konisiさん。コメントありがとうございました。
そう言えば、MACやUNIXはピリオド"."を持つファイル名を使っていたことを思い出しました。DOSの様に拡張子でどうのこうのはなかったと思いますが、MACやUNIXに由来したDOS系のソフトの場合は長い拡張子を持ったファイルがあってもおかしくないと思います。
そこで、私のXp Home Editionを探してみましたらありました!
\Acrobat 7.0\Distillr\Settings\にPress Quality.joboptionsという10バイトの拡張子を持つファイルです。
もっとも、私には4バイトもあれば十分ですが...
なんか、知識の水たまりができそうな感じです。ありがとうございました。
そう言えば、MACやUNIXはピリオド"."を持つファイル名を使っていたことを思い出しました。DOSの様に拡張子でどうのこうのはなかったと思いますが、MACやUNIXに由来したDOS系のソフトの場合は長い拡張子を持ったファイルがあってもおかしくないと思います。
そこで、私のXp Home Editionを探してみましたらありました!
\Acrobat 7.0\Distillr\Settings\にPress Quality.joboptionsという10バイトの拡張子を持つファイルです。
もっとも、私には4バイトもあれば十分ですが...
なんか、知識の水たまりができそうな感じです。ありがとうございました。
よく見つけましたねー。
知識の水溜りより知恵の泉のほうが見てみたいなー とか無関係なことを書いてみます。
追記 in 2006/8/8 20:53
substilemediavidなる16文字拡張子が確認されました。
知識の水溜りより知恵の泉のほうが見てみたいなー とか無関係なことを書いてみます。
追記 in 2006/8/8 20:53
substilemediavidなる16文字拡張子が確認されました。
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。