_splitpathが動きません

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
AntiMS

_splitpathが動きません

#1 投稿記事 by AntiMS »

_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
-------------------------------------------------------------
イグトランス
記事: 899
登録日時: 2005年5月31日(火) 17:59
お住まい: 東京都
連絡する:

#2 投稿記事 by イグトランス »

まずString型の文字列から,その文字列への(BytePtr型の)ポインタを取り出すにはVarPtrではなく,StrPtrを用います。

そして_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
Anti MS

Re: 超初心者でご面倒をおかけしますが、

#3 投稿記事 by Anti MS »

 イグトランス (egtra)さん
大変ありがとうございました。完璧に動きました。m(--)m

基本的なことがわかっていませんでした。何となくVarPtrではまずいかな?とか_splitpathの変数の指定の仕方が悪いだろうとうは思っていたのですが...^^);

それから、拡張子のext[63]は、きっとどこかに63+1バイトの制限があるのでしょうね。

大変役に立ちました。今後ともどうぞよろしくお願いいたします。
イグトランス
記事: 899
登録日時: 2005年5月31日(火) 17:59
お住まい: 東京都
連絡する:

#4 投稿記事 by イグトランス »

いえ,63は適当に決めただけで,深い意味はありません。
たとえば,絶対に3文字しか有り得ないと決め付けてよいのなら,Dim ext[3] As Byteとしても構いません。
Anti MS

Re:_splitpathが動きません

#5 投稿記事 by Anti MS »

イグトランス (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
---------------------------------------------------------------------------
konisi
記事: 893
登録日時: 2005年7月25日(月) 13:27
お住まい: 埼玉県東松山市
連絡する:

#6 投稿記事 by konisi »

ちなみに、ですが。
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を主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
Anti MS

Re:_splitpathが動きません

#7 投稿記事 by Anti MS »

konisiさん。コメントありがとうございました。

そう言えば、MACやUNIXはピリオド"."を持つファイル名を使っていたことを思い出しました。DOSの様に拡張子でどうのこうのはなかったと思いますが、MACやUNIXに由来したDOS系のソフトの場合は長い拡張子を持ったファイルがあってもおかしくないと思います。

そこで、私のXp Home Editionを探してみましたらありました!
\Acrobat 7.0\Distillr\Settings\にPress Quality.joboptionsという10バイトの拡張子を持つファイルです。

もっとも、私には4バイトもあれば十分ですが...

なんか、知識の水たまりができそうな感じです。ありがとうございました。
konisi
記事: 893
登録日時: 2005年7月25日(月) 13:27
お住まい: 埼玉県東松山市
連絡する:

#8 投稿記事 by konisi »

よく見つけましたねー。

知識の水溜りより知恵の泉のほうが見てみたいなー とか無関係なことを書いてみます。

追記 in 2006/8/8 20:53
substilemediavidなる16文字拡張子が確認されました。
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
返信する