_splitpathが動きません

返信する


答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: _splitpathが動きません

by konisi » 2006年7月28日(金) 20:02

よく見つけましたねー。

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

追記 in 2006/8/8 20:53
substilemediavidなる16文字拡張子が確認されました。

Re:_splitpathが動きません

by Anti MS » 2006年7月27日(木) 22:57

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

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

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

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

なんか、知識の水たまりができそうな感じです。ありがとうございました。

by konisi » 2006年7月27日(木) 18:57

ちなみに、ですが。
WindowsXPにおいて、3文字より多い拡張子は一般的なものでも数種類あります。

例:*.java,*.class,*.html,*.jpeg,*.text,*.mhtml*.midi,*.mpeg,*.wave 等。


6文字以上の奴はなかなか見ませんので、10文字分くらいあれば十分じゃないかと。

追記
APPLE社の付ける拡張子はやたら長いということが判明。
例:*.framework,*.preference 等。

Re:_splitpathが動きません

by Anti MS » 2006年7月27日(木) 16:24

イグトランス (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
---------------------------------------------------------------------------

by イグトランス » 2006年7月27日(木) 10:17

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

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

by Anti MS » 2006年7月27日(木) 10:05

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

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

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

大変役に立ちました。今後ともどうぞよろしくお願いいたします。

by イグトランス » 2006年7月27日(木) 08:46

まず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

_splitpathが動きません

by AntiMS » 2006年7月26日(水) 23:36

_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
-------------------------------------------------------------

ページトップ