ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年3月29日(金) 00:16

全ての表示時間は UTC+09:00 です




新しいトピックを投稿する  トピックへ返信する  [ 8 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2008年12月27日(土) 21:31 
オフライン

登録日時: 2006年5月07日(日) 17:16
記事: 185
お住まい: 宮城県
関数:_splitpathを使ってファイル名と取り出すのに次のようなコードを組みましたが、
変数:fname[0]が常にゼロとなってしまい、スタティックテキストに何も表示されませ
ん原因は何でしょうか。
ちなみに、他の変数にはきちんと文字が代入されています。
コード:
dim drv[2]  As Byte
dim path[255] As Byte
dim fname[255] As Byte
dim ext[3] As Byte
'bufferにファイルのパスが入っている
_splitpath(buffer, drv, path, fname, ext)

'スタティックテキストにパスを設定する
SetWindowText(hStatic,lstrcat(fname,ext))
'fname[0]=0となりスタティックテキストに何も表示できない


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2008年12月27日(土) 22:40 
オフライン

登録日時: 2005年7月25日(月) 13:27
記事: 893
お住まい: 埼玉県東松山市
こちらの環境では、bufferの中身が
C:/test/test.abp.txt
となってるときには上手く動きませんでしたが、
C:\test\test.abp.txt
となってるときには上手く動きました。

bufferの中身はどのようになっていますか?

_________________
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

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


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2008年12月27日(土) 23:08 
オフライン

登録日時: 2006年5月07日(日) 17:16
記事: 185
お住まい: 宮城県
bufferの中身は「ファイルを開く」ダイアログボックスで取得しているのでいろいろ変わりますが、
C:\test\test.abp.txt
などという形式です。
また、
_splitpath("C:/test/test.abp.txt", drv, path, fname, ext)
のように直接パスを入れてみてもうまくいきませんでした。
また、普通の.abのファイルに下のようなコードで試したところ、こちらではうまくいきました。しかし、プロジェクトファイルではうまくいきませんでした。
コード:
dim drv[2]  As Byte
dim path[255] As Byte
dim fname[255] As Byte
dim ext[63] As Byte
dim f[255] As Byte
Dim ofn As OPENFILENAME
Dim buffer[MAX_PATH-1] As Byte
'------------------
' ファイル名を取得
'------------------
ofn.lStructSize=Len(ofn)
ofn.hwndOwner=0
ofn.lpstrFilter=Ex"マルチメディア ファイル (*.avi;*.wav;*.mid;*.mp3;*.wma)\0*.avi;*.wav;*.mid;*.mp3;*.wma\0すべてのファイル(*.*)\0*\0\0"
ofn.nFilterIndex=1
ofn.nMaxFile=MAX_PATH
ofn.Flags=OFN_FILEMUSTEXIST or OFN_HIDEREADONLY
ofn.lpstrFile=f

GetOpenFileName(ofn)

_splitpath(ofn.lpstrFile, drv, path, fname, ext)
MessageBox(0, lstrcat(fname,ext), "testcode", MB_OK)
end


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2008年12月29日(月) 16:41 
オフライン

登録日時: 2005年7月25日(月) 13:27
記事: 893
お住まい: 埼玉県東松山市
>また、普通の.abのファイルに下のようなコードで試したところ
AB5のどのバージョンを使っていますか?
「UNICODE文字セットを使用する」のチェックが入っている場合は、_splitpath関数の代わりに_wsplitpath関数を用いる事で解決するかもしれません。
コード:
Declare Sub _wsplitpath Lib "MSVCRT" (path As *Word,drive As *Word,dir As *Word,name As *Word,ext As *Word)

_________________
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

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


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2008年12月31日(水) 20:38 
オフライン

登録日時: 2006年5月07日(日) 17:16
記事: 185
お住まい: 宮城県
バージョンはAB5β13です。「UNICODE文字セットを使用する」のチェックは入っていませんでした。_wsplitpath関数を使って試してみましたがうまくいきませんでした。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2009年1月03日(土) 08:09 
ver424で下記のようにして使ってます。
以前に凡そで造ったので、何か変な気がしていますが動いてます。

function filesplit(tes as string,k as word) as string
dim drv as BytePtr ,dir as BytePtr ,fna as BytePtr ,ext as BytePtr
dim ppath as BytePtr
drv=malloc(8)
dir=malloc(255)
fna=malloc(128)
ext=malloc(8)
ppath=calloc(512)
_splitpath(tes,drv,dir,fna,ext)
select case k
case 1
lstrcat(ppath,drv)'
lstrcat(ppath,dir)'
case 2
lstrcat(ppath,fna)'
lstrcat(ppath,ext)'
end select
ppath[lstrlen(ppath)]=0
filesplit=MakeStr(ppath)
end function


通報する
ページトップ
   
 記事の件名:
投稿記事Posted: 2009年1月03日(土) 15:05 
オフライン

登録日時: 2005年7月25日(月) 13:27
記事: 893
お住まい: 埼玉県東松山市
なぜβ13使ってるんだろう。
せめてAB4.24とかAB5CP5とか使ってみてください。

>>ゲスト
見間違いでなければ、物凄い勢いでメモリリークしない?その関数。

_________________
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

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


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2009年1月03日(土) 16:21 
オフライン

登録日時: 2006年5月07日(日) 17:16
記事: 185
お住まい: 宮城県
Konisiさんのコードでうまくファイル名を分離できました。ゲストさん、konisiさんありがとうございました。ちなみに、β13を使う理由はAB5のほうがきのうがいいけれどABCP5だとものすごい数のエラーが出るから、ということです。


通報する
ページトップ
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 8 件の記事 ] 

全ての表示時間は UTC+09:00 です


オンラインデータ

このフォーラムを閲覧中のユーザー: Ahrefs [Bot] & ゲスト[22人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
cron
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean