作成者 |
メッセージ |
|
|
Konisiさんのコードでうまくファイル名を分離できました。ゲストさん、konisiさんありがとうございました。ちなみに、β13を使う理由はAB5のほうがきのうがいいけれどABCP5だとものすごい数のエラーが出るから、ということです。
Konisiさんのコードでうまくファイル名を分離できました。ゲストさん、konisiさんありがとうございました。ちなみに、β13を使う理由はAB5のほうがきのうがいいけれどABCP5だとものすごい数のエラーが出るから、ということです。
|
|
|
投稿記事 |
Posted: 2009年1月03日(土) 16:21 |
|
|
|
|
|
なぜβ13使ってるんだろう。
せめてAB4.24とかAB5CP5とか使ってみてください。
>>ゲスト
見間違いでなければ、物凄い勢いでメモリリークしない?その関数。
とりあえず異常系とか書き足してみる。 [ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします]コード: Const FILESPLIT_DIRECTORY=1
Const FILESPLIT_FILENAME=2
Function filesplit(tes As String,k As Long) As String
Dim drv As *Byte,dir As *Byte,fna As *Byte,ext As *Byte
Dim ppath As *Byte
Dim length As Long
filesplit=""
length=Len(tes)
drv=malloc(length+1)
dir=malloc(length+1)
fna=malloc(length+1)
ext=malloc(length+1)
ppath=malloc(length+1)
If drv=0 Or dir=0 Or fna=0 Or ext=0 Or ppath=0 then'mallocが上手く動かない場合
free(drv)
free(dir)
free(fna)
free(ext)
free(ppath)
Exit Function
End If
ppath[0]=0
_splitpath(StrPtr(tes),drv,dir,fna,ext)
Select Case k
Case 1
lstrcat(ppath,drv)
lstrcat(ppath,dir)
Case 2
lstrcat(ppath,fna)
lstrcat(ppath,ext)
Case Else
lstrcpy(ppath,StrPtr(tes))
End Select
filesplit=MakeStr(ppath)
free(ppath)
free(drv)
free(dir)
free(fna)
free(ext)
End Function
'使用例
#console
Print filesplit("c:\tes\test.txt",FILESPLIT_DIRECTORY)
Print filesplit("c:\tes\test.txt",FILESPLIT_FILENAME)
Sleep(-1)
なぜβ13使ってるんだろう。 せめてAB4.24とかAB5CP5とか使ってみてください。
>>ゲスト 見間違いでなければ、物凄い勢いでメモリリークしない?その関数。
[hide=とりあえず異常系とか書き足してみる。][code]Const FILESPLIT_DIRECTORY=1 Const FILESPLIT_FILENAME=2
Function filesplit(tes As String,k As Long) As String Dim drv As *Byte,dir As *Byte,fna As *Byte,ext As *Byte Dim ppath As *Byte Dim length As Long
filesplit="" length=Len(tes)
drv=malloc(length+1) dir=malloc(length+1) fna=malloc(length+1) ext=malloc(length+1) ppath=malloc(length+1) If drv=0 Or dir=0 Or fna=0 Or ext=0 Or ppath=0 then'mallocが上手く動かない場合 free(drv) free(dir) free(fna) free(ext) free(ppath) Exit Function End If ppath[0]=0
_splitpath(StrPtr(tes),drv,dir,fna,ext) Select Case k Case 1 lstrcat(ppath,drv) lstrcat(ppath,dir) Case 2 lstrcat(ppath,fna) lstrcat(ppath,ext) Case Else lstrcpy(ppath,StrPtr(tes)) End Select filesplit=MakeStr(ppath)
free(ppath) free(drv) free(dir) free(fna) free(ext) End Function
'使用例 #console Print filesplit("c:\tes\test.txt",FILESPLIT_DIRECTORY) Print filesplit("c:\tes\test.txt",FILESPLIT_FILENAME) Sleep(-1)[/code][/hide]
|
|
|
投稿記事 |
Posted: 2009年1月03日(土) 15:05 |
|
|
|
|
|
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
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日(土) 08:09 |
|
|
|
|
|
バージョンはAB5β13です。「UNICODE文字セットを使用する」のチェックは入っていませんでした。_wsplitpath関数を使って試してみましたがうまくいきませんでした。
バージョンはAB5β13です。「UNICODE文字セットを使用する」のチェックは入っていませんでした。_wsplitpath関数を使って試してみましたがうまくいきませんでした。
|
|
|
投稿記事 |
Posted: 2008年12月31日(水) 20:38 |
|
|
|
|
|
>また、普通の.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)
>また、普通の.abのファイルに下のようなコードで試したところ AB5のどのバージョンを使っていますか? 「UNICODE文字セットを使用する」のチェックが入っている場合は、_splitpath関数の代わりに_wsplitpath関数を用いる事で解決するかもしれません。 [code]Declare Sub _wsplitpath Lib "MSVCRT" (path As *Word,drive As *Word,dir As *Word,name As *Word,ext As *Word)[/code]
|
|
|
投稿記事 |
Posted: 2008年12月29日(月) 16:41 |
|
|
|
|
|
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
bufferの中身は「ファイルを開く」ダイアログボックスで取得しているのでいろいろ変わりますが、 C:\test\test.abp.txt などという形式です。 また、 _splitpath("C:/test/test.abp.txt", drv, path, fname, ext) のように直接パスを入れてみてもうまくいきませんでした。 また、普通の.abのファイルに下のようなコードで試したところ、こちらではうまくいきました。しかし、プロジェクトファイルではうまくいきませんでした。 [code]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[/code]
|
|
|
投稿記事 |
Posted: 2008年12月27日(土) 23:08 |
|
|
|
|
|
こちらの環境では、bufferの中身が
C:/test/test.abp.txt
となってるときには上手く動きませんでしたが、
C:\test\test.abp.txt
となってるときには上手く動きました。
bufferの中身はどのようになっていますか?
こちらの環境では、bufferの中身が C:/test/test.abp.txt となってるときには上手く動きませんでしたが、 C:\test\test.abp.txt となってるときには上手く動きました。
bufferの中身はどのようになっていますか?
|
|
|
投稿記事 |
Posted: 2008年12月27日(土) 22:40 |
|
|
|
|
|
関数:_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となりスタティックテキストに何も表示できない
関数:_splitpathを使ってファイル名と取り出すのに次のようなコードを組みましたが、 変数:fname[0]が常にゼロとなってしまい、スタティックテキストに何も表示されませ ん原因は何でしょうか。 ちなみに、他の変数にはきちんと文字が代入されています。 [code]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となりスタティックテキストに何も表示できない [/code]
|
|
|
投稿記事 |
Posted: 2008年12月27日(土) 21:31 |
|
|
|
|