source: Include/Classes/System/IO/Path.ab @ 197

Last change on this file since 197 was 197, checked in by OverTaker, 16 years ago

タイプミスと若干のコード修整

File size: 4.3 KB
Line 
1' System/IO/Path.ab
2
3#require <Classes/System/Environment.ab>
4
5Class Path
6Public
7    Static AltDirectorySeparatorChar = &H2F As Char '/
8    Static DirectorySeparatorChar = &H5C As Char    '\
9    Static PathSeparator = &H3B As Char             ';
10    Static VolumeSeparatorChar = &H3A As Char       ':
11
12    Static Function GetFileName(path As String) As String
13        Return path.Remove(0, getLastSeparatorPosision(path) + 1)
14    End Function
15
16    Static Function GetFileNameWithoutExtension(path As String) As String
17        Dim fileName = GetFileName(path) As String
18        Dim extPos = getExtensionPosition(fileName) As Long
19        If extPos = -1 Then Return ""
20
21        Return fileName.Remove(extPos)
22    End Function
23
24    '手抜き
25    Static Function GetRandomFileName() As String
26        Randomize
27        Dim temp As Long
28        temp = Rnd() * 900000000 + 10000000
29        Return Str$(temp)
30    End Function
31
32    Static Function GetExtension(path As String) As String
33        Dim extPos = getExtensionPosition(path) As Long
34        If extPos = -1 Then Return ""
35
36        Return path.Remove(0, extPos)
37    End Function
38
39    Static Function ChangeExtension(path As String, extension As String) As String
40        Dim extPos = getExtensionPosition(path) As Long
41        If extPos => 0 Then
42            path = path.Remove(extPos)
43        End If
44
45        Return path + extension
46    End Function
47
48    Static Function HasExtension(ByRef path As String) As Boolean
49        If GetExtension(path) <> "" Then
50            Return True
51        Else
52            Return False
53        End If
54    End Function
55
56    Static Function GetTempFileName() As String
57        Dim tempPathSize = __GetTempPath(0, 0)
58        Dim tempPath = _System_malloc(SizeOf (TCHAR) * tempPathSize) As PTSTR
59        If tempPath = 0 Then
60            ' Throw OutOfMemoryException
61            Debug
62        End If
63        If __GetTempPath(tempPathSize, tempPath) > tempPathSize Then
64            ' Throw IOException?
65            Debug
66        End If
67
68        Dim tempFileName[ELM(MAX_PATH)] As TCHAR
69        __GetTempFileName(tempPath, "ABT", 0, tempFileName)
70        free(tempPath)
71        Return tempFileName
72    End Function
73
74    Static Function GetTempPath() As String
75        Dim size = GetTempPath(0, 0)
76        Dim tempPath = _System_malloc(size)
77        __GetTempPath(size, tempPath)
78        GetTempPath = tempPath
79        _System_free(tempPath)
80    End Function
81
82    Static Function GetFullPath(path As String) As String
83        If IsPathRooted(path) Then
84            Return path
85        Else
86            Return Environment.CurrentDirectory + Chr$(DirectorySeparatorChar) + path
87        End If
88    End Function
89
90    Static Function GetDirectoryName(path As String) As String
91        Dim lastSepPos = getLastSeparatorPosision(path) As Long
92        If lastSepPos = -1 Then Return ""
93
94        path = path.Remove(lastSepPos)
95        If path.Length <= 3 Then
96            If IsPathRooted(path) Then Return ""
97        End If
98        Return path
99    End Function
100
101    Static Function GetPathRoot(path As String) As String
102        If IsPathRooted(path) Then
103            Return path.Remove(3)
104        Else
105            Return ""
106        End If
107    End Function
108
109    Static Function IsPathRooted(path As String) As Boolean
110        If path.IndexOf(Chr$(VolumeSeparatorChar), 1, 1) = 1 Then
111            Return True
112        Else
113            Return False
114        End If
115    End Function
116
117    Static Function Combine(path1 As String, path2 As String) As String
118        If path1.LastIndexOf(Chr$(VolumeSeparatorChar)) And path1.Length = 2 Then
119            Return path1 + path2
120        End If
121
122        If path1.LastIndexOf(Chr$(DirectorySeparatorChar), ELM(path1.Length), 1) = -1 Then
123            Return path1 + Chr$(DirectorySeparatorChar) + path2
124        Else
125            Return path1 + path2
126        End If
127    End Function
128
129Private
130    Static Function getExtensionPosition(ByRef path As String) As Long
131        Dim lastSepPos = getLastSeparatorPosision(path) As Long
132        getExtensionPosition = path.LastIndexOf(".", ELM(path.Length), path.Length - lastSepPos)
133    End Function
134
135    Static Function getLastSeparatorPosision(ByRef path As String) As Long
136        Dim lastSepPos = path.LastIndexOf(Chr$(DirectorySeparatorChar)) As Long
137        If lastSepPos <> -1 Then Return lastSepPos
138
139        lastSepPos = path.LastIndexOf(Chr$(VolumeSeparatorChar))
140        Return lastSepPos
141    End Function
142End Class
143
144'今はメソッド内で使えないので、実装されるまで回避
145Function __GetTempPath(nBufferLength As DWord, lpBuffer As LPSTR) As DWord
146    Return GetTempPath(nBufferLength, lpBuffer)
147End Function
148
149Function __GetTempFileName(pPathName As PCSTR, pPrefixString As PCSTR, uUnique As DWord, pTempFileName As PSTR) As DWord
150    Return GetTempFileName(pPathName, pPrefixString, uUnique, pTempFileName)
151End Function
Note: See TracBrowser for help on using the repository browser.