source: trunk/Include/Classes/System/IO/DirectoryInfo.ab@ 376

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

ファイルかどうかの判定を修整。

File size: 5.1 KB
RevLine 
[318]1Imports System.Collections.Generic
[271]2
3Namespace System
4Namespace IO
5
[129]6Class DirectoryInfo
7 Inherits FileSystemInfo
8Public
9 Sub DirectoryInfo(path As String)
10 OriginalPath = path
11 FullPath = Path.GetFullPath(path)
12 End Sub
13
14 Sub ~DirectoryInfo()
15 End Sub
16
17 'Public Property
18 Function Parent() As DirectoryInfo
[318]19 Return New DirectoryInfo(Path.GetDirectoryName(FullPath))
[129]20 End Function
21
22 Function Root() As DirectoryInfo
[318]23 Return New DirectoryInfo(Path.GetPathRoot(FullPath))
[129]24 End Function
25
26 'Public Method
27 Sub Create()
[142]28 CreateDirectory(ToTCStr(FullPath), NULL)
[129]29 End Sub
30
31/* Sub Create(directorySecurity As DirectorySecurity)
32 End Sub*/
33
34 Override Sub Delete()
[142]35 RemoveDirectory(ToTCStr(FullPath))
[129]36 End Sub
37
[271]38 Sub Delete(recursive As Boolean)
39 If recursive Then
40 ' ディレクトリ内のすべての情報を削除する
[129]41
[271]42 Dim dirPath = FullPath As String
43
44 ' 終端の '\' を除去
[285]45 If dirPath[dirPath.Length-1] = Asc("\") Then
46 dirPath = dirPath.Substring(0, dirPath.Length-1)
[271]47 End If
48
49 ' double null-terminated にする
50 dirPath = dirPath + Chr$(0)
51
52 Dim op As SHFILEOPSTRUCT
53 op.hwnd = NULL
54 op.wFunc = FO_DELETE
[285]55 op.pFrom = ToTCStr(dirPath)
[271]56 op.pTo = NULL
57 op.fFlags = FOF_NOCONFIRMATION or FOF_NOERRORUI or FOF_SILENT
58
59 If SHFileOperation(op) <> 0 Then
60 ' TODO: エラー処理
61 debug
62 End If
63 Else
64 ' ディレクトリが空の場合は削除する
65 This.Delete()
66 End If
67 End Sub
68
[129]69/* Function GetAccessControl() As DirectorySecurity
70 End Function*/
71
72/* Function GetAccessControl(includeSections As AccessControlSections) As DirectorySecurity
73 End Function*/
74
[318]75 Function GetDirectories() As List<DirectoryInfo>
76 Return GetDirectories("?*")
77 End Function
[129]78
[318]79 Function GetDirectories(searchPattern As String) As List<DirectoryInfo>
80 Dim infos As List<FileSystemInfo>
81 infos = GetFileSystemInfos(searchPattern)
[129]82
[318]83 Dim dirs As List<DirectoryInfo>
84 Dim i As Long
85 For i = 0 To ELM(infos.Count)
[376]86 If infos[i].Attributes = FILE_ATTRIBUTE_DIRECTORY Then
[318]87 dirs.Add(infos[i] As DirectoryInfo)
88 End If
89 Next
90 Return dirs
91 End Function
[129]92
[325]93 Function GetDirectories(searchPattern As String, searchOption As SearchOption) As List<DirectoryInfo>
[327]94 Select Case searchOption
95 Case SearchOption.TopDirectoryOnly
96 Return GetDirectories(searchPattern)
97 Case SearchOption.AllDirectories
98 Dim dirs As List<DirectoryInfo>
99 dirs = GetDirectories(searchPattern)
[142]100
[327]101 Dim subdirs As List<DirectoryInfo>
102 Dim i As Long, j As Long
103 For i = 0 To ELM(dirs.Count)
104 subdirs = dirs[i].GetDirectories(searchPattern)
105 For j = 0 To ELM(subdirs.Count)
[333]106 dirs.Add(subdirs[j])
[327]107 Next
[321]108 Next
[327]109 Return dirs
110 End Select
[325]111 End Function
[142]112
[318]113 Function GetFiles() As List<FileInfo>
114 Return GetFiles("?*")
115 End Function
[129]116
[318]117 Function GetFiles(searchPattern As String) As List<FileInfo>
118 Dim infos As List<FileSystemInfo>
119 infos = GetFileSystemInfos(searchPattern)
[129]120
[318]121 Dim files As List<FileInfo>
122 Dim i As Long
123 For i = 0 To ELM(infos.Count)
[376]124 If infos[i].Attributes <> FILE_ATTRIBUTE_DIRECTORY Then
[318]125 files.Add(infos[i] As FileInfo)
126 End If
127 Next
128 Return files
129 End Function
130
[327]131 Function GetFiles(searchPattern As String, searchOption As SearchOption) As List<FileInfo>
132 Select Case searchOption
133 Case SearchOption.TopDirectoryOnly
134 Return GetFiles(searchPattern)
135 Case SearchOption.AllDirectories
136 Dim dirs As List<DirectoryInfo>
[333]137 dirs = GetDirectories("?*", SearchOption.AllDirectories)
[129]138
[327]139 Dim files As List<FileInfo>
[333]140 files = GetFiles(searchPattern)
141 Dim i As Long, j As Long, subfiles As List<FileInfo>
[327]142 For i = 0 To ELM(dirs.Count)
143 subfiles = dirs[i].GetFiles(searchPattern)
144 For j = 0 To ELM(subfiles.Count)
145 files.Add(subfiles[j])
146 Next
147 Next
148 Return files
149 End Select
150 End Function
151
[318]152 Function GetFileSystemInfos() As List<FileSystemInfo>
153 Return GetFileSystemInfos("?*")
154 End Function
155
156 Function GetFileSystemInfos(searchPattern As String) As List<FileSystemInfo>
157 Dim find As HANDLE
158 Dim findData As WIN32_FIND_DATA
[327]159 find = FindFirstFile(ToTCStr(Path.Combine(FullPath, searchPattern)), findData)
[318]160 If find = INVALID_HANDLE_VALUE Then
[345]161 Return New List<DirectoryInfo>
[318]162 End If
163
164 Dim files As List<FileSystemInfo>
[327]165 Do
[345]166 Dim s = New String(findData.cFileName As PCTSTR)
167 If (findData.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY Then
168 files.Add(New DirectoryInfo(Path.Combine(FullPath, s)))
169 Else
170 files.Add(New FileInfo(Path.Combine(FullPath, s)))
[318]171 End If
[327]172 Loop While FindNextFile(find, findData)
[321]173 FindClose(find)
[327]174
[345]175 files.Remove(New DirectoryInfo(Path.Combine(FullPath, ".")))
176 files.Remove(New DirectoryInfo(Path.Combine(FullPath, "..")))
177
[327]178 If GetLastError() = ERROR_NO_MORE_FILES Then
179 Return files
180 Else
181 debug 'Exception
182 Return Nothing
183 End If
[318]184 End Function
185
[129]186 Sub MoveTo(destDirName As String)
[142]187 If MoveFile(ToTCStr(FullPath), ToTCStr(destDirName)) = FALSE Then
[129]188 'Exception
189 End If
190 End Sub
191
192/* Sub SetAccessControl(directorySecurity As DirectorySecurity)
193 End Sub*/
194
195End Class
196
[271]197End Namespace
198End Namespace
Note: See TracBrowser for help on using the repository browser.