パス名の各種操作(U) <TOP>
パス名操作に関するAPIをテストしています。
PathAddBackslash パスを表す文字列の最後にバックスラッシュ\を付け加える。含まれる場合は付け加えられない
PathAddExtension パスを表す文字列の最後にファイル拡張子を付け加える。既に付けられている場合は付加されない
PathAppend 既存のパスにファイル名を追加
PathBuildRoot ドライブ番号からルートパスを生成
PathCanonicalize "."や".."などの文字を含むパス名を、これらの文字を含まないパス名に変換
PathCombine ディレクトリ名とファイルパスの結合
PathCommonPrefix 二つのパスで共通しているプレフィックスを取得
PathCompactPath 短縮形式のパスを取得
PathCompactPathEx 文字数に収まるようにパスの一部を省略
PathCreateFromUrl URLパスを取得しDOSパスに変換
'================================================================ '= パス名の操作(U) '= (PathFunctions2.bas) '================================================================ #include "Windows.bi" ' パスを表す文字列の最後にバックスラッシュ\を付け加える。含まれる場合は付け加えられない Declare Function Api_PathAddBackslash& Lib "shlwapi" Alias "PathAddBackslashA" (ByVal pszPath$) ' パスを表す文字列の最後にファイル拡張子を付け加える。既に付けられている場合は付加されない Declare Function Api_PathAddExtension& Lib "shlwapi" Alias "PathAddExtensionA" (ByVal pszPath$, ByVal pszExt$) ' 既存のパスにファイル名を追加 Declare Function Api_PathAppend& Lib "shlwapi" Alias "PathAppendA" (ByVal pszPath$, ByVal pMore$) ' ドライブ番号からルートパスを生成 Declare Function Api_PathBuildRoot& Lib "shlwapi" Alias "PathBuildRootA" (ByVal szRoot$, ByVal iDrive$) ' "."や".."などの文字を含むパス名を、これらの文字を含まないパス名に変換 Declare Function Api_PathCanonicalize& Lib "shlwapi" Alias "PathCanonicalizeA" (ByVal pszBuf$, ByVal pszPath$) ' ディレクトリ名とファイルパスの結合 Declare Function Api_PathCombine& Lib "shlwapi" Alias "PathCombineA" (ByVal szDest$, ByVal lpszDir$, ByVal lpszFile$) ' 二つのパスで共通しているプレフィックスを取得 Declare Function Api_PathCommonPrefix& Lib "shlwapi" Alias "PathCommonPrefixA" (ByVal pszFile1$, ByVal pszFile2$, ByVal achPath$) ' 短縮形式のパスを取得 Declare Function Api_PathCompactPath& Lib "shlwapi" Alias "PathCompactPathA" (ByVal hDC&, ByVal pszPath$, ByVal dx&) ' 文字数に収まるようにパスの一部を省略 Declare Function Api_PathCompactPathEx& Lib "shlwapi" Alias "PathCompactPathExA" (ByVal pszOut$, ByVal pszSrc$, ByVal cchMax&, ByVal dwFlags&) ' URLパスを取得しDOSパスに変換 Declare Sub Api_PathCreateFromUrl Lib "shlwapi" Alias "PathCreateFromUrlA" (ByVal pszUrl$, ByVal pszPath$, ByRef pcchPath&, ByVal dwFlags&) ' 指定されたウィンドウのクライアント領域または画面全体を表すディスプレイデバイスコンテキストのハンドルを取得 Declare Function Api_GetDC& Lib "user32" Alias "GetDC" (ByVal hWnd&) ' デバイスコンテキストを解放 Declare Function Api_ReleaseDC& Lib "user32" Alias "ReleaseDC" (ByVal hWnd&, ByVal hDC&) Var Shared List1 As Object List1.Attach GetDlgItem("List1") : List1.SetFontSize 14 List1.SetWindowSize 382, 256 '================================================================ '= '================================================================ Declare Function StripTerminator(sInput As String) As String Function StripTerminator(sInput As String) As String Var ZeroPos As Long ZeroPos = instr(1, sInput, Chr$(0)) If ZeroPos > 0 Then StripTerminator = Left$(sInput, ZeroPos - 1) Else StripTerminator = sInput End If End Function '================================================================ '= パス名の各種操作 '================================================================ Declare Sub MainForm_Start edecl () Sub MainForm_Start() Var sSave As String Var hDC As Long Var Ret As Long hDC = Api_GetDC(List1.GethWnd) List1.ResetContent sSave = "c:\testpath\dir" + String$(100, Chr$(0)) 'パスのバッファ List1.Addstring "■PathAddBackslash:\の無い場合\を追加" List1.AddString " " & sSave Ret = Api_PathAddBackslash(sSave) '\の無い場合\を追加 List1.AddString " →" & StripTerminator(sSave) '結果 List1.AddString "" sSave = "c:\testpath\dir\myfile" + String$(100, Chr$(0)) '拡張子のないファイル名とバッファ List1.Addstring "■PathAddExtension:拡張子が無い場合(.tst)追加" List1.AddString " " & sSave Ret = Api_PathAddExtension(sSave, ".tst") '拡張子を持っていない場合(.tst)追加 List1.AddString " →" & StripTerminator(sSave) '結果 List1.AddString "" sSave = "c:\testpath\dir" + String$(100, Chr$(0)) 'ディレクトリバッファ List1.Addstring "■PathAppend:ファイル名でディレクトリ追加" List1.AddString " " & sSave Ret = Api_PathAppend(sSave, "myfile.tst") 'ファイル名でディレクトリ追加 List1.AddString " →" & StripTerminator(sSave) '結果 List1.AddString "" sSave = String$(100, Chr$(0)) 'バッファ List1.Addstring "■PathBuildRoot:ドライブ番号からルートパスを作成" List1.AddString " ByVal 2" Ret = Api_PathBuildRoot(sSave, ByVal 2) '与えられたドライブ番号からルートパスを作成 List1.AddString " →" & StripTerminator(sSave) '結果 List1.AddString "" sSave = String$(255, Chr$(0)) 'バッファ List1.Addstring "■PathCanonicalize:与えるパスを正規化" List1.AddString " " & Chr$(34) & "c:\dir1\.\dir2\..\dir3" & Chr$(34) Ret = Api_PathCanonicalize(sSave, "c:\dir1\.\dir2\..\dir3") '与えるパスを正規化(Canonicalize) List1.AddString " →" & StripTerminator(sSave) '結果 List1.AddString "" sSave = String$(255, Chr$(0)) 'バッファ List1.Addstring "■PathCombine:二つのパスを連結" List1.AddString " " & Chr$(34) & "C:" & Chr$(34) & ", " & Chr$(34) & "One\Two\Three" & Chr$(34) Ret = Api_PathCombine(sSave, "C:", "One\Two\Three") '二つのパスを連結 List1.AddString " →" & StripTerminator(sSave) '結果 List1.AddString "" sSave = String$(255, Chr$(0)) 'バッファ・/ 二つのパスで共通しているプレフィックスを取得 List1.Addstring "■PathCommonPrefix:共通プレフィックスを取得" List1.AddString " " & Chr$(34) & "C:\mydir\test\myfile.ext" List1.AddString " " & Chr$(34) & "c:\mydir\testing\hello.txt" Ret = Api_PathCommonPrefix("C:\mydir\test\myfile.ext", "c:\mydir\testing\hello.txt", sSave) List1.AddString " →" & StripTerminator(sSave) '結果 List1.AddString "" sSave = "file:///C:/This/is/a/long/path/myfile.txt" List1.Addstring "■PathCompactPath:200ピクセルの長方形に収まるようパスを短縮" List1.AddString " " & sSave Ret = Api_PathCompactPath(hDC, sSave, 200) '例では200ピクセルの長方形に収まるようパスを短縮 List1.AddString " →" & StripTerminator(sSave) '結果 List1.AddString "" sSave = String$(255, Chr$(0)) 'バッファ List1.Addstring "■PathCompactPathEx:25文字に収まるようパス名を短縮" List1.AddString " C:\This\is\a\long\path\myfile.txt" Ret = Api_PathCompactPathEx(sSave, "C:\This\is\a\long\path\myfile.txt", 25, 0) '25文字に収まるようパス名を短縮 List1.AddString " →" & StripTerminator(sSave) '結果 List1.AddString "" sSave = String$(255, Chr$(0)) 'バッファ List1.Addstring "■PathCreateFromUrl:URLファイルをDOSファイルに変換" List1.AddString " file:///C:/dir/myfile.ext" Api_PathCreateFromUrl "file:///C:/dir/myfile.ext", sSave, Len(sSave), 0 'URLファイルをDOSファイルに変換 List1.AddString " →" & StripTerminator(sSave) '結果 Ret = Api_ReleaseDC(hDC, List1.GethWnd) End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End