Index: trunk/Include/Classes/System/IO/DirectoryInfo.ab
===================================================================
--- trunk/Include/Classes/System/IO/DirectoryInfo.ab	(revision 313)
+++ trunk/Include/Classes/System/IO/DirectoryInfo.ab	(revision 318)
@@ -1,2 +1,3 @@
+Imports System.Collections.Generic
 
 Namespace System
@@ -17,11 +18,9 @@
 	'Public Property
 	Function Parent() As DirectoryInfo
-		Dim dirInfo As DirectoryInfo(Path.GetDirectoryName(FullPath))
-		Return dirInfo
+		Return New DirectoryInfo(Path.GetDirectoryName(FullPath))
 	End Function
 
 	Function Root() As DirectoryInfo
-		Dim dirInfo As DirectoryInfo(Path.GetPathRoot(FullPath))
-		Return dirInfo
+		Return New DirectoryInfo(Path.GetPathRoot(FullPath))
 	End Function
 
@@ -75,27 +74,91 @@
 	End Function*/
 
-/*	Function GetDirectories() As Array
+	Function GetDirectories() As List<DirectoryInfo>
+		Return GetDirectories("?*")
+	End Function
+
+	Function GetDirectories(searchPattern As String) As List<DirectoryInfo>
+		Dim infos As List<FileSystemInfo>
+		infos = GetFileSystemInfos(searchPattern)
+
+		Dim dirs As List<DirectoryInfo>
+		Dim i As Long
+		For i = 0 To ELM(infos.Count)
+			If infos[i].GetType.ToString() = "DirectoryInfo" Then
+				dirs.Add(infos[i] As DirectoryInfo)
+			End If
+		Next
+		Return dirs
+	End Function
+
+/*	Function GetDirectories(searchPattern As String, searchOption As SearchOption) As List<DirectoryInfo>
+		If searchOption = SearchOption.TopDirectoryOnly Then
+			Return GetDirectories(searchPattern)
+		Else
+			Dim dirs As List<DirectoryInfo>
+			dirs = GetDirectories(searchPattern)
+			Dim i As Long
+
+		End If
 	End Function*/
 
-/*	Function GetDirectories(searchPattern As String) As Array
+	Function GetFiles() As List<FileInfo>
+		Return GetFiles("?*")
+	End Function
+
+	Function GetFiles(searchPattern As String) As List<FileInfo>
+		Dim infos As List<FileSystemInfo>
+		infos = GetFileSystemInfos(searchPattern)
+
+		Dim files As List<FileInfo>
+		Dim i As Long
+		For i = 0 To ELM(infos.Count)
+			If infos[i].GetType.ToString() = "FileInfo" Then
+				files.Add(infos[i] As FileInfo)
+			End If
+		Next
+		Return files
+	End Function
+
+/*	Function GetFiles(searchPattern As String, searchOption As SearchOption) As List<FileInfo>
 	End Function*/
 
-/*	Function GetDirectories(searchPattern As String, searchOption As SearchOption) As Array
-	End Function*/
+	Function GetFileSystemInfos() As List<FileSystemInfo>
+		Return GetFileSystemInfos("?*")
+	End Function
 
-/*	Function GetFiles() As Array
-	End Function*/
+	Function GetFileSystemInfos(searchPattern As String) As List<FileSystemInfo>
+		Dim find As HANDLE
+		Dim findData As WIN32_FIND_DATA
+		find = FindFirstFile(ToTCStr(Path.Combine(FullPath, searchPattern)), findData)
+		If find = INVALID_HANDLE_VALUE Then
+			debug 'Exception
+			Return Nothing
+		End If
 
-/*	Function GetFiles(searchPattern As String) As Array
-	End Function*/
+		Dim files As List<FileSystemInfo>
+		Dim lastError = GetLastError() As DWord
+		Dim i As Long
+		While lastError <> ERROR_NO_MORE_FILES
+			If i > 1 Then
+				Dim s = New String(findData.cFileName As PCTSTR)
+				If (findData.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY Then
+					files.Add(New DirectoryInfo(Path.Combine(FullPath, s)))
+				Else
+					files.Add(New FileInfo(Path.Combine(FullPath, s)))
+				End If
+			End If
 
-/*	Function GetFiles(searchPattern As String, searchOption As SearchOption) As Array
-	End Function*/
-
-/*	Function GetFileSystemInfos() As Array
-	End Function*/
-
-/*	Function GetFileSystemInfos(searchPattern As String) As Array
-	End Function*/
+			If FindNextFile(find, findData) = False Then
+				lastError = GetLastError()
+				If lastError <> ERROR_NO_MORE_FILES Then
+					debug 'Exception
+					Return Nothing
+				End If
+			End If
+			i++
+		Wend
+		Return files
+	End Function
 
 	Sub MoveTo(destDirName As String)
@@ -110,9 +173,4 @@
 End Class
 
-Enum SearchOption
-	AllDirectories
-	TopDirectoryOnly
-End Enum
-
 End Namespace
 End Namespace
Index: trunk/Include/Classes/System/IO/FileInfo.ab
===================================================================
--- trunk/Include/Classes/System/IO/FileInfo.ab	(revision 313)
+++ trunk/Include/Classes/System/IO/FileInfo.ab	(revision 318)
@@ -4,5 +4,36 @@
 
 Class FileInfo
+	Inherits FileSystemInfo
+Public
+	Sub FileInfo(path As String)
+		OriginalPath = path
+		FullPath = Path.GetFullPath(path)
+		Refresh()
+	End Sub
+
+	Sub ~FileInfo()
+	End Sub
+
+	'----------------------------------------------------------------
+	' Public properties
+	'----------------------------------------------------------------
+
+	Function Directory() As DirectoryInfo
+		Return New DirectoryInfo(Path.GetDirectoryName(FullPath))
+	End Function
+
+	Function DirectoryName() As String
+		Return Path.GetDirectoryName(FullPath)
+	End Function
+
+	Function IsReadOnly() As Boolean
+		If (Attributes And FILE_ATTRIBUTE_READONLY) = FILE_ATTRIBUTE_READONLY Then
+			Return True
+		Else
+			Return False
+		End If
+	End Function
 End Class
+
 
 
Index: trunk/Include/Classes/System/IO/FileSystemInfo.ab
===================================================================
--- trunk/Include/Classes/System/IO/FileSystemInfo.ab	(revision 313)
+++ trunk/Include/Classes/System/IO/FileSystemInfo.ab	(revision 318)
@@ -12,64 +12,24 @@
 	OriginalPath As String
 Public
-	'Public Properties
-	Function Attributes() As FileAttributes
-		Select Case m_FileAttributes
-			Case FILE_ATTRIBUTE_ARCHIVE
-				Return FileAttributes.Archive
-			Case FILE_ATTRIBUTE_COMPRESSED
-				Return FileAttributes.Compressed
-			Case FILE_ATTRIBUTE_DIRECTORY
-				Return FileAttributes.Directory
-			Case FILE_ATTRIBUTE_ENCRYPTED
-				Return FileAttributes.Encrypted
-			Case FILE_ATTRIBUTE_HIDDEN
-				Return FileAttributes.Hidden
-			Case FILE_ATTRIBUTE_NORMAL
-				Return FileAttributes.Normal
-			Case FILE_ATTRIBUTE_OFFLINE
-				Return FileAttributes.Offline
-			Case FILE_ATTRIBUTE_READONLY
-				Return FileAttributes.ReadOnly
-			Case FILE_ATTRIBUTE_REPARSE_POINT
-				Return FileAttributes.ReparsePoint
-			Case FILE_ATTRIBUTE_SPARSE_FILE
-				Return FileAttributes.SparseFile
-			Case FILE_ATTRIBUTE_SYSTEM
-				Return FileAttributes.System
-			Case FILE_ATTRIBUTE_TEMPORARY
-				Return FileAttributes.Temporary
-			Case Else
-				'Exception
-				Debug
-		End Select
+
+	Override Function Equals( object As Object ) As Boolean
+		If This.ToString = object.ToString Then
+			Return True
+		Else
+			Return False
+		End If
 	End Function
 
-	Sub Attributes(ByRef value As FileAttributes)
-		Dim attributes As DWord
-		Select Case value
-			Case FileAttributes.Archive
-				attributes = FILE_ATTRIBUTE_ARCHIVE
-			Case FileAttributes.Compressed
-				attributes = FILE_ATTRIBUTE_COMPRESSED
-			Case FileAttributes.Directory
-				attributes = FILE_ATTRIBUTE_DIRECTORY
-			Case FileAttributes.Hidden
-				attributes = FILE_ATTRIBUTE_HIDDEN
-			Case FileAttributes.Normal
-				attributes = FILE_ATTRIBUTE_NORMAL
-			Case FileAttributes.Offline
-				attributes = FILE_ATTRIBUTE_OFFLINE
-			Case FileAttributes.ReadOnly
-				attributes = FILE_ATTRIBUTE_READONLY
-			Case FileAttributes.System
-				attributes = FILE_ATTRIBUTE_SYSTEM
-			Case FileAttributes.Temporary
-				attributes = FILE_ATTRIBUTE_TEMPORARY
-			Case Else
-				'Exception
-				Exit Sub
-		End Select
+	Override Function ToString() As String
+		Return FullPath
+	End Function
 
-		If SetFileAttributes(FullPath, attributes) = FALSE Then
+	'Public Properties
+	Function Attributes() As DWord'FileAttributes
+		Return m_FileAttributes
+	End Function
+
+	Sub Attributes(value As DWord)
+		If SetFileAttributes(FullPath, value) = FALSE Then
 			'Exception
 			Debug
Index: trunk/Include/Classes/System/IO/index.ab
===================================================================
--- trunk/Include/Classes/System/IO/index.ab	(revision 313)
+++ trunk/Include/Classes/System/IO/index.ab	(revision 318)
@@ -3,4 +3,5 @@
 #require "DriveInfo.ab"
 #require "File.ab"
+#require "FileInfo.ab"
 #require "FileStream.ab"
 #require "FileSystemInfo.ab"
Index: trunk/Include/Classes/System/IO/misc.ab
===================================================================
--- trunk/Include/Classes/System/IO/misc.ab	(revision 313)
+++ trunk/Include/Classes/System/IO/misc.ab	(revision 318)
@@ -7,2 +7,7 @@
 	End
 End Enum
+
+Enum SearchOption
+	AllDirectories
+	TopDirectoryOnly
+End Enum
