ページ 11

開いているファイルのフルパスからの切り出し

Posted: 2006年6月29日(木) 22:24
by 雷電
ファイルパスをフルパスからファイル名だけを取り出そうとして悩んでいます。
フルパスからファイル名は切り出せるんですけど、切り出してしまうと、フォルダのパスになってしまいます。
どうにかならないものなのでしょうか?

Posted: 2006年6月29日(木) 22:40
by Toshi
フルパスからファイル名の部分だけを切り出すと、「何が」フォルダのパスになってしまうのでしょうか?
そこが質問の大事なところだと思うので...

Posted: 2006年6月29日(木) 22:52
by 雷電

コード: 全て選択

Dim i As Long

i=lstrlen(File)-1
Do
    If File=Asc("\") Then
          File=0
          Exit Do
    End If
    i=i-1
    If i<0 Then Exit Do
Loop

こういうことです。
しかしこれはフォルダのパスを作るものなので、できません

Posted: 2006年6月29日(木) 22:53
by 雷電
質問の大事なところに答えるのを忘れていましたね。
その開いているファイルのあるフォルダです。

Re: 開いているファイルのフルパスからの切り出し

Posted: 2006年6月30日(金) 14:33
by Tomorrow
> ファイルパスをフルパスからファイル名だけを取り出そうとして悩んでいます。
Win32APIのGetFileTitle()を使ってはみてはどうでしょう?

http://www.activebasic.com/help_center/ ... eTitle.htm

Posted: 2006年7月01日(土) 14:25
by 雷電
使ってみましたが、うまくいきません、
作ったコードに間違いがあるのでしょうか?

コード: 全て選択

Dim FILEPATH[MAX_PATH-1] As BytePtr
Dim FULL As BytePtr

GetFileTitle(FULL,FILEPATH,MAX_PATH)
SetWindowText( hMainWnd, FILEPATH)

Posted: 2006年7月01日(土) 14:28
by Toshi
そのような場合なら

コード: 全て選択


Dim FILEPATH[MAX_PATH-1] As Byte

です。ポインタではなく文字列そのものを格納するバッファが必要になります。

Posted: 2006年7月01日(土) 14:39
by 雷電
できましたが、ウィンドウのタイトルバーには文字列が表示されません。
何故でしょう?

Posted: 2006年7月01日(土) 23:33
by ゲスト
セットウィンドウテキスト

Posted: 2006年7月02日(日) 12:09
by 雷電
私的には、GetFileTitle関数のパラメータ指定が間違っているとしか思いようがありません。
しかし、どこが間違っているのやら・・・さっぱり。
探してみます。

Posted: 2006年7月02日(日) 18:07
by Ryo

コード: 全て選択

    Sub MainWnd_Create ( ByRef CreateStruct As CREATESTRUCT )
        Dim FullPath As BytePtr
        Dim NameByte As Integer
        Dim FileName As BytePtr
        FullPath = malloc ( 24 )
        lstrcpy ( FullPath , "C:\WINDOWS\explorer.exe" )
        NameByte = GetFileTitle ( FullPath , FileName , 0 )
        FileName = malloc ( NameByte )
        GetFileTitle ( FullPath , FileName , NameByte )
        SetWindowText ( hMainWnd , FileName )
        free ( FileName )
    End Sub
こんな感じでどうでしょうか?

#この処理を関数化しようと試みましたが上手くいきませんでした。
#String型でなら関数化出来たんですがString型は嫌いなので・・・。

Posted: 2006年7月02日(日) 18:10
by Ryo
すみません、free ( FileName )の前にfree ( FullPath )が抜けてました。