Changeset 404 for trunk/Include/Classes/System/IO/Path.ab
- Timestamp:
- Feb 12, 2008, 3:40:11 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Include/Classes/System/IO/Path.ab
r388 r404 1 ' System/IO/Path.ab 1 /*! 2 @file Classes/System/IO/Path.ab 3 @brief ファイルパス文字列を操作する 4 @author OverTaker 5 */ 2 6 3 7 #require <Classes/System/Environment.ab> 4 5 8 6 9 Namespace System 7 10 Namespace IO 8 9 11 10 12 Class Path 11 13 Public 12 14 Static AltDirectorySeparatorChar = &H2F As StrChar '/ 13 Static DirectorySeparatorChar = &H5C As StrChar '\ 14 Static PathSeparator = &H3B As StrChar '; 15 Static VolumeSeparatorChar = &H3A As StrChar ': 16 15 Static DirectorySeparatorChar = &H5C As StrChar '\ 16 Static PathSeparator = &H3B As StrChar '; 17 Static VolumeSeparatorChar = &H3A As StrChar ': 18 19 /*! 20 @brief ファイル名を取得する 21 @author OverTaker 22 @date 23 @param ファイルパス 24 @return ファイル名 25 */ 17 26 Static Function GetFileName(path As String) As String 18 Return path.Remove(0, getLastSeparatorPosision(path) + 1) 19 End Function 20 27 CheckPath(path) 28 Return path.Remove(0, GetLastSeparatorIndex(path) + 1) 29 End Function 30 31 /*! 32 @brief 拡張子を除いたファイル名を取得する 33 @author OverTaker 34 @date 35 @param ファイルパス 36 @return ファイル名 37 */ 21 38 Static Function GetFileNameWithoutExtension(path As String) As String 39 CheckPath(path) 22 40 Dim fileName = GetFileName(path) As String 23 Dim extPos = getExtensionPosition(fileName) As Long41 Dim extPos = GetExtensionIndex(fileName) As Long 24 42 If extPos = -1 Then Return "" 25 43 … … 27 45 End Function 28 46 29 '手抜き 47 /*! 48 @brief ランダムなファイル名を取得する 49 @author OverTaker 50 @date 51 @param ファイルパス 52 @return ファイル名 53 */ 30 54 Static Function GetRandomFileName() As String 31 55 Randomize … … 35 59 End Function 36 60 61 /*! 62 @brief ファイルの拡張子を取得する 63 @author OverTaker 64 @date 65 @param ファイルパス 66 @return 拡張子(.を含む) 67 */ 37 68 Static Function GetExtension(path As String) As String 38 Dim extPos = getExtensionPosition(path) As Long 69 CheckPath(path) 70 Dim extPos = GetExtensionIndex(path) As Long 39 71 If extPos = -1 Then Return "" 40 72 … … 42 74 End Function 43 75 76 /*! 77 @brief ファイル拡張子を変更する 78 @author OverTaker 79 @date 80 @param 拡張子(.を含む) 81 @return 拡張子を変更したファイルパス 82 */ 44 83 Static Function ChangeExtension(path As String, extension As String) As String 45 Dim extPos = getExtensionPosition(path) As Long84 Dim extPos = GetExtensionIndex(path) As Long 46 85 If extPos => 0 Then 47 86 path = path.Remove(extPos) 48 87 End If 49 88 89 CheckPath(path) 50 90 Return path + extension 51 91 End Function 52 92 53 Static Function HasExtension(ByRef path As String) As Boolean 93 /*! 94 @brief ファイルパスの拡張子が含まれるかどうか 95 @author OverTaker 96 @date 97 @param ファイルパス 98 @return 拡張子があればTure,なければFalse 99 */ 100 Static Function HasExtension(path As String) As Boolean 101 CheckPath(path) 54 102 If GetExtension(path) <> "" Then 55 103 Return True … … 59 107 End Function 60 108 109 /*! 110 @brief 一時ファイルを作成し、ファイルパスを取得する 111 @author OverTaker 112 @date 113 @return 一時ファイルを示すファイルパス 114 */ 61 115 Static Function GetTempFileName() As String 62 116 Dim tempPathSize = __GetTempPath(0, 0) … … 76 130 Return New String(tempFileName, len As Long) 77 131 End Function 78 132 133 /*! 134 @brief システムの一時フォルダを取得する 135 @author OverTaker 136 @date 137 @return ファイルパス 138 */ 79 139 Static Function GetTempPath() As String 80 140 Dim size = __GetTempPath(0, 0) … … 85 145 End Function 86 146 147 /*! 148 @brief フルパスを取得する 149 @author OverTaker 150 @date 151 @param ファイルパス 152 @return ファイルパス 153 */ 87 154 Static Function GetFullPath(path As String) As String 155 CheckPath(path) 88 156 If IsPathRooted(path) Then 89 157 Return path … … 93 161 End Function 94 162 163 /*! 164 @brief ひとつ上のディレクトリを取得する 165 @author OverTaker 166 @date 167 @param ファイルパス 168 @return ひとつ上のディレクトリを示すファイルパス 169 */ 95 170 Static Function GetDirectoryName(path As String) As String 96 Dim lastSepPos = getLastSeparatorPosision(path) As Long 171 CheckPath(path) 172 Dim lastSepPos = GetLastSeparatorIndex(path) As Long 97 173 If lastSepPos = -1 Then Return "" 98 174 … … 104 180 End Function 105 181 182 /*! 183 @brief ルートディレクトリを取得する 184 @author OverTaker 185 @date 186 @param ファイルパス 187 @return ルートディレクトリを示すパス 188 */ 106 189 Static Function GetPathRoot(path As String) As String 190 CheckPath(path) 107 191 If IsPathRooted(path) Then 108 192 Return path.Remove(3) … … 112 196 End Function 113 197 198 /*! 199 @brief パスにルートディレクトリが含まれるかどうか 200 @author OverTaker 201 @date 202 @param ファイルパス 203 @return 含まれる場合True,そうでない場合False 204 */ 114 205 Static Function IsPathRooted(path As String) As Boolean 206 CheckPath(path) 115 207 If path.IndexOf(Chr$(VolumeSeparatorChar), 1, 1) = 1 Then 116 208 Return True … … 120 212 End Function 121 213 214 /*! 215 @brief 二つのパスを結合します 216 @author OverTaker 217 @date 218 @param 結合されるファイルパス 219 @param 結合するファイルパス 220 @return 結合されたファイルパス 221 */ 122 222 Static Function Combine(path1 As String, path2 As String) As String 223 CheckPath(path1) 224 CheckPath(path2) 123 225 If path1.LastIndexOf(VolumeSeparatorChar) And path1.Length = 2 Then 124 226 Return path1 + path2 … … 133 235 134 236 Private 135 Static Function getExtensionPosition(path As String) As Long 136 Dim lastSepPos = getLastSeparatorPosision(path) As Long 137 If lastSepPos = -1 Then 138 lastSepPos = 0 139 End If 140 getExtensionPosition = path.LastIndexOf(Asc("."), ELM(path.Length), path.Length - lastSepPos) 141 End Function 142 143 Static Function getLastSeparatorPosision(path As String) As Long 144 Dim lastSepPos = path.LastIndexOf(DirectorySeparatorChar) As Long 145 If lastSepPos <> -1 Then Return lastSepPos 146 147 lastSepPos = path.LastIndexOf(VolumeSeparatorChar) 148 Return lastSepPos 237 Static Const InvalidPathChars = Ex"\q<>|\0\t" As String 238 239 /*! 240 @brief 無効なパス文字列がないか調べる 241 @author OverTaker 242 @date 243 @param ファイルパス 244 */ 245 Static Sub CheckPath(path As String) 246 Dim i As Long 247 For i = 0 To ELM(InvalidPathChars.Length) 248 If path.Contains(InvalidPathChars.Substring(i, 1)) Then 249 Throw 250 End If 251 Next 252 End Sub 253 254 /*! 255 @brief ファイルの拡張子の位置を取得する 256 @author OverTaker 257 @date 258 @param ファイルパス 259 @return 0から始まるインデックス値。みつからない場合-1 260 */ 261 Static Function GetExtensionIndex(path As String) As Long 262 Dim lastSepIndex = GetLastSeparatorIndex(path) As Long 263 If lastSepIndex = -1 Then lastSepIndex = 0 264 Return path.LastIndexOf(Asc("."), ELM(path.Length), path.Length - lastSepIndex) 265 End Function 266 267 /*! 268 @brief 最も後ろにあるディレクトリ区切り文字の位置を取得する 269 @author OverTaker 270 @date 271 @param ファイルパス 272 @return 0から始まるインデックス値。みつからない場合-1 273 */ 274 Static Function GetLastSeparatorIndex(path As String) As Long 275 Return System.Math.Max( path.LastIndexOf(DirectorySeparatorChar), 276 path.LastIndexOf(VolumeSeparatorChar) ) 149 277 End Function 150 278 End Class
Note:
See TracChangeset
for help on using the changeset viewer.