Index: trunk/Include/Classes/System/IO/Directory.ab
===================================================================
--- trunk/Include/Classes/System/IO/Directory.ab	(revision 406)
+++ trunk/Include/Classes/System/IO/Directory.ab	(revision 407)
@@ -4,107 +4,363 @@
 Namespace IO
 
+/*!
+@brief	ディレクトリの情報を取得したり操作するクラス
+*/
+
 Class Directory
+Public
+
+	'----------------------------------------------------------------
+	' パブリック メソッド
+	'----------------------------------------------------------------
+
+	/*!
+	@brief	ディレクトリを作成する
+	@param  作成するディレクトリのファイルパス
+	@return 作成されたディレクトリのDirctoryInfo
+	*/
 	Static Function CreateDirectory(path As String) As DirectoryInfo
-	End Function
-
+		Dim info = New DirectoryInfo(path)
+		info.Create()
+		Return info
+	End Function
+
+	/*
 	Static Function CreateDirectory(path As String, directorySecurity As DirectorySecurity) As DirectoryInfo
-	End Function
-
+	End Function */
+
+	/*!
+	@brief	ディレクトリを削除する
+	ディレクトリが開き出ない場合は削除されない
+	@param  消去するディレクトリのファイルパス
+	*/
 	Static Sub Delete(path As String)
-	End Sub
-
+		Dim info = New DirectoryInfo(path)
+		info.Delete()
+	End Sub
+
+	/*!
+	@brief	ディレクトリを削除する
+	@param  削除するディレクトリのファイルパス
+	@param  ディレクトリの中身も消去する場合True
+	*/
 	Static Sub Delete(path As String, recursive As Boolean)
-	End Sub
-
+		Dim info = New DirectoryInfo(path)
+		info.Delete(recursive)
+	End Sub
+
+	/*!
+	@brief	ディレクトリが存在するかどうか
+	@param  調べるディレクトリのファイルパス
+	@retval True  存在する
+	@retval False 存在しない
+	*/
 	Static Function Exist(path As String) As Boolean
-	End Function
-
+		Dim info = New DirectoryInfo(path)
+		Return info.Exists
+	End Function
+
+	/*!
+	@brief	カレントディレクトリを取得する
+	@return カレントディレクトリを示すパス
+	*/
 	Static Function GetCurrentDirectory() As String
-	End Function
-
+		Return System.Environment.CurrentDirectory
+	End Function
+
+	/*
 	Static Function GetAccessControl(path As String) As DirectorySecurity
-	End Function 
+	End Function
 
 	Static Function GetAccessControl(path As String, includeSections As System.Security.AccessControl.AccessControlSections) As DirectorySecurity
 	End Function
-
-	Static Function GetCreationTime(oath As String) As DateTime
-	End Function
-
+	*/
+
+	/*!
+	@brief	ディレクトリの作成日を取得する
+	@param  ディレクトリを示すパス
+	@return 作成日
+	*/
+	Static Function GetCreationTime(path As String) As DateTime
+		Dim info = New DirectoryInfo(path)
+		Return info.CreationTime
+	End Function
+
+	/*!
+	@brief	ディレクトリの作成日をUTC時刻で取得する
+	@param  ディレクトリを示すパス
+	@return 作成日(UTC)
+	*/
 	Static Function GetCreationTimeUtc(path As String) As DateTime
-	End Function
-
+		Dim info = New DirectoryInfo(path)
+		Return info.CreationTimeUtc
+	End Function
+
+	/*!
+	@brief	ディレクトリ内のディレクトリを列挙する
+	@param  中身を調べるディレクトリのパス
+	@return ディレクトリのパス文字列が列挙された配列
+	*/
 	Static Function GetDirectories(path As String) As List<String>
-	End Function
-
+		Return GetDirectories(path, "?*", SearchOption.TopDirectoryOnly)
+	End Function
+
+	/*!
+	@brief	ディレクトリ内のディレクトリを列挙する
+	@param  中身を調べるディレクトリのパス
+	@param  サーチするディレクトリ名のパターン
+	@return ディレクトリのパス文字列が列挙された配列
+	*/
 	Static Function GetDirectories(path As String, searchPattern As String) As List<String>
-	End Function
-
+		Return GetDirectories(path, searchPattern, SearchOption.TopDirectoryOnly)
+	End Function
+
+	/*!
+	@brief	ディレクトリ内のディレクトリを列挙する
+	@param  中身を調べるディレクトリのパス
+	@param  サーチするディレクトリ名のパターン
+	@param  サーチする範囲
+	@return ディレクトリのパス文字列が列挙された配列
+	*/
 	Static Function GetDirectories(path As String, searchPattern As String, searchOption As SearchOption) As List<String>
-	End Function
-
+		Dim info = New DirectoryInfo(path)
+		Dim infos = info.GetDirectories(searchPattern, searchOption) As List<DirectoryInfo>
+		Dim enumerator = infos.GetEnumerator()
+		Dim list As List<String>
+		While enumerator.MoveNext()
+			list.Add(enumerator.Current.ToString)
+		Wend
+		Return list
+	End Function
+
+	/*!
+	@brief	ディレクトリのルートディレクトリを取得する
+	@param  ディレクトリのパス
+	@return ルートディレクトリ
+	*/
 	Static Function GetDirectoryRoot(path As String) As String
-	End Function
-
+		Return Path.GetPathRoot(path)
+	End Function
+
+	/*!
+	@brief	ディレクトリ内のファイルを列挙する
+	@param  中身を調べるディレクトリのパス
+	@return ファイルのパス文字列が列挙された配列
+	*/
 	Static Function GetFiles(path As String) As List<String>
-	End Function
-
+		Return GetFiles(path, "?*", SearchOption.TopDirectoryOnly)
+	End Function
+
+	/*!
+	@brief	ディレクトリ内のファイルを列挙する
+	@param  中身を調べるディレクトリのパス
+	@param  サーチするファイル名のパターン
+	@return ファイルのパス文字列が列挙された配列
+	*/
 	Static Function GetFiles(path As String, searchPattern As String) As List<String>
-	End Function
-
+		Return GetFiles(path, searchPattern, SearchOption.TopDirectoryOnly)
+	End Function
+
+	/*!
+	@brief	ディレクトリ内のファイルを列挙する
+	@param  中身を調べるディレクトリのパス
+	@param  サーチするファイル名のパターン
+	@param  サーチする範囲
+	@return ファイルのパス文字列が列挙された配列
+	*/
 	Static Function GetFiles(path As String, searchPattern As String, searchOption As SearchOption) As List<String>
-	End Function
-
+		Dim info = New DirectoryInfo(path)
+		Dim infos = info.GetFiles(searchPattern, searchOption) As List<FileInfo>
+		Dim enumerator = infos.GetEnumerator()
+		Dim list As List<String>
+		While enumerator.MoveNext()
+			list.Add(enumerator.Current.ToString)
+		Wend
+		Return list
+	End Function
+
+	/*!
+	@brief	ディレクトリ内を列挙する
+	@param  中身を調べるディレクトリのパス
+	@return ファイルやディレクトリのパス文字列が列挙された配列
+	*/
 	Static Function GetFileSystemEnties(path As String) As List<String>
-	End Function
-
+		Return GetFileSystemEnties(path, "?*")
+	End Function
+
+	/*!
+	@brief	ディレクトリ内を列挙する
+	@param  中身を調べるディレクトリのパス
+	@param  サーチするファイル名のパターン
+	@return ファイルやディレクトリのパス文字列が列挙された配列
+	*/
 	Static Function GetFileSystemEnties(path As String, searchPattern As String) As List<String>
-	End Function
-
+		Dim info = New DirectoryInfo(path)
+		Dim infos = info.GetFileSystemInfos(searchPattern) As List<FileSystemInfo>
+		Dim enumerator = infos.GetEnumerator()
+		Dim list As List<String>
+		While enumerator.MoveNext()
+			list.Add(enumerator.Current.ToString)
+		Wend
+		Return list
+	End Function
+
+	/*!
+	@brief	ディレクトリの最終アクセス日を取得する
+	@param  ディレクトリのパス
+	@return 最終アクセス日
+	*/
 	Static Function GetLastAccessTime(path As String) As DateTime
-	End Function
-
+		Dim info = New DirectoryInfo(path)
+		Return info.LastAccessTime
+	End Function
+
+	/*!
+	@brief	ディレクトリの最終アクセス日をUTC時刻で取得する
+	@param  ディレクトリのパス
+	@return 最終アクセス日(UTC)
+	*/
 	Static Function GetLastAccessTimeUtc(path As String) As DateTime
-	End Function
-
+		Dim info = New DirectoryInfo(path)
+		Return info.LastAccessTimeUtc
+	End Function
+
+	/*!
+	@brief	ディレクトリの最終書き込み日を取得する
+	@param  ディレクトリのパス
+	@return 最終書き込み日
+	*/
 	Static Function GetLastWriteTime(path As String) As DateTime
-	End Function
-
+		Dim info = New DirectoryInfo(path)
+		Return info.LastWriteTime
+	End Function
+
+	/*!
+	@brief	ディレクトリの最終書き込み日をUTC時刻で取得する
+	@param  ディレクトリのパス
+	@return 最終書き込み日(UTC)
+	*/
 	Static Function GetLastWriteTimeUtc(path As String) As DateTime
-	End Function
-
+		Dim info = New DirectoryInfo(path)
+		Return info.LastWriteTimeUtc
+	End Function
+
+	/*!
+	@brief	使用可能な論理ドライブを列挙する
+	@return 論理ドライブを列挙したパス文字列
+	*/
 	Static Function GetLogicalDrives() As List<String>
-	End Function
-
+		Dim drives = WIN32API_GetLogicalDrives() As DWord
+		If drives <> 0 Then
+			Dim list As List<String>
+			Dim i As SByte
+			For i = 0 To 25
+				If (drives and (1 << i)) <> 0 Then
+					list.Add(Chr$(Asc("A") + i) + ":\")
+				End If
+			Next
+			Return list
+		Else
+			Throw New IOException("Directory.GetLogicalDrives: Failed to GetLogicalDirives.")
+		End If
+	End Function
+
+	/*!
+	@brief	ディレクトリのひとつ上のディレクトリを取得する
+	@param  ディレクトリのパス
+	@return ひとつ上のディレクトリ
+	*/
 	Static Function GetParent(path As String) As DirectoryInfo
-	End Function
-
+		Return New DirectoryInfo(Path.GetDirectoryName(path))
+	End Function
+
+	/*!
+	@brief	ディレクトリを移動する
+	@param  移動元のディレクトリのパス
+	@param  移動後のディレクトリのパス
+	*/
 	Static Sub Move(sourceDirName As String, destDirName As String)
-	End Sub
-
+		Dim info = New DirectoryInfo(sourceDirName)
+		info.MoveTo(destDirName)
+	End Sub
+
+	/*
 	Static Sub SetAccessControl(path As String, directorySecurity As DirectorySecurity)
 	End Sub
-
+	*/
+
+	/*!
+	@brief	ディレクトリの作成日を設定する
+	@param  ディレクトリのパス
+	@param  作成日
+	*/
 	Static Sub SetCreationTime(path As String, creationTime As DateTime)
-	End Sub
-
+		Dim info = New DirectoryInfo(path)
+		info.CreationTime = creationTime
+	End Sub
+
+	/*!
+	@brief	ディレクトリの作成日をUTC時刻で設定する
+	@param  ディレクトリのパス
+	@param  作成日(UTC)
+	*/
 	Static Sub SetCreationTimeUtc(path As String, creationTime As DateTime)
-	End Sub
-
+		Dim info = New DirectoryInfo(path)
+		info.CreationTimeUtc = creationTime
+	End Sub
+
+	/*!
+	@brief	カレントディレクトリを設定する
+	@param  ディレクトリのパス
+	*/
 	Static Sub SetCurrentDirectory(path As String)
-	End Sub
-
+		System.Environment.CurrentDirectory = path
+	End Sub
+
+	/*!
+	@brief	ディレクトリの最終アクセス日を設定する
+	@param  ディレクトリのパス
+	@param  最終アクセス日
+	*/
 	Static Sub SetLastAccessTime(path As String, lastAccessTime As DateTime)
-	End Sub
-
+		Dim info = New DirectoryInfo(path)
+		info.LastAccessTime = lastAccessTime
+	End Sub
+
+	/*!
+	@brief	ディレクトリの最終アクセス日をUTC時刻で設定する
+	@param  ディレクトリのパス
+	@param  最終アクセス日(UTC)
+	*/
 	Static Sub SetLastAccessTimeUtc(path As String, lastAccessTime As DateTime)
-	End Sub
-
+		Dim info = New DirectoryInfo(path)
+		info.LastAccessTimeUtc = lastAccessTime
+	End Sub
+
+	/*!
+	@brief	ディレクトリの最終書き込み日を設定する
+	@param  ディレクトリのパス
+	@param  最終書き込み日
+	*/
 	Static Sub SetLastWriteTime(path As String, lastWriteTime As DateTime)
-	End Sub
-
+		Dim info = New DirectoryInfo(path)
+		info.LastWriteTime = lastWriteTime
+	End Sub
+
+	/*!
+	@brief	ディレクトリの最終書き込み日をUTC時刻で設定する
+	@param  ディレクトリのパス
+	@param  最終書き込み日(UTC)
+	*/
 	Static Sub SetLastWriteTimeUtc(path As String, lastWriteTime As DateTime)
+		Dim info = New DirectoryInfo(path)
+		info.LastWriteTimeUtc = lastWriteTime
 	End Sub
 End Class
+
+/* 名前が被ってメソッドから呼び出せない */
+Function WIN32API_GetLogicalDrives() As DWord
+	Return GetLogicalDrives()
+End Function
 
 End Namespace
Index: trunk/Include/Classes/System/IO/DirectoryInfo.ab
===================================================================
--- trunk/Include/Classes/System/IO/DirectoryInfo.ab	(revision 406)
+++ trunk/Include/Classes/System/IO/DirectoryInfo.ab	(revision 407)
@@ -55,5 +55,14 @@
 	*/
 	Sub Create()
-		CreateDirectory(ToTCStr(FullPath), NULL)
+		If CreateDirectory(ToTCStr(FullPath), NULL) = False Then
+			Dim error = GetLastError()
+			Select Case error
+				Case ERROR_ALREADY_EXISTS
+					Throw New IOException("DirectoryInfo.CreateDirectory: The directory has already existed.")
+				Case Else
+					Throw New IOException("DirectoryInfo.CreateDirectory: Failed to CreateDirectory")
+
+			End Select
+		End If
 	End Sub
 
@@ -98,6 +107,5 @@
 
 			If SHFileOperation(op) <> 0 Then
-				' TODO: エラー処理
-				debug
+				Throw New IOException("DirectoryInfo.Delete: Failed to SHFileOperation.")
 			End If
 		Else
@@ -254,5 +262,6 @@
 		find = FindFirstFile(ToTCStr(Path.Combine(FullPath, searchPattern)), findData)
 		If find = INVALID_HANDLE_VALUE Then
-			Return New List<DirectoryInfo>
+			Throw New IOException("DirectoryInfo.GetFileSystemInfos: Failed to FindFirstFile.")
+			Return Nothing
 		End If
 
@@ -274,5 +283,5 @@
 			Return files
 		Else
-			debug 'Exception
+			Throw New IOException("DirectoryInfo.GetFileSystemInfos: Failed to FindNextFile.")
 			Return Nothing
 		End If
@@ -287,5 +296,5 @@
 	Sub MoveTo(destDirName As String)
 		If MoveFile(ToTCStr(FullPath), ToTCStr(destDirName)) = FALSE Then
-			'Exception
+			Throw New IOException("DirectoryInfo.MoveTo: Failed to MoveFile.")
 		End If
 	End Sub
Index: trunk/Include/Classes/System/IO/FileSystemInfo.ab
===================================================================
--- trunk/Include/Classes/System/IO/FileSystemInfo.ab	(revision 406)
+++ trunk/Include/Classes/System/IO/FileSystemInfo.ab	(revision 407)
@@ -245,5 +245,5 @@
 	Virtual Sub Delete()
 		If DeleteFile(ToTCStr(FullPath)) = FALSE Then
-			Throw 'Exception
+			Throw New IOException("DriveInfo.Delete: Failed to DeleteFile.")
 		End If
 	End Sub
@@ -258,10 +258,13 @@
 		FindClose(hFind)
 
-		m_FileAttributes = New FileAttributes(data.dwFileAttributes As Long, "FileAttributes")
-		m_CreationTime = data.ftCreationTime
-		m_LastAccessTime = data.ftLastAccessTime
-		m_LastWriteTime = data.ftLastWriteTime
-
-		m_IsFreshed = True
+		If hFind <> INVALID_HANDLE_VALUE Then
+			m_FileAttributes = New FileAttributes(data.dwFileAttributes As Long, "FileAttributes")
+			m_CreationTime = data.ftCreationTime
+			m_LastAccessTime = data.ftLastAccessTime
+			m_LastWriteTime = data.ftLastWriteTime
+			m_IsFreshed = True
+		Else
+			Throw New IOException("DriveInfo.Refresh: Failed to FindFirstFile.")
+		End If
 	End Sub
 
@@ -280,10 +283,10 @@
 		Dim hFile = CreateFile(ToTCStr(FullPath), GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0)
 		If hFile = INVALID_HANDLE_VALUE Then
-			debug 'Exception
+			Throw New IOException("DriveInfo.setFileTime: Failed to CreateFile.")
 			Exit Function
 		End If
 
 		If SetFileTime(hFile, m_CreationTime, m_LastAccessTime, m_LastWriteTime) = False Then
-			debug 'Exception
+			Throw New IOException("DriveInfo.setFileTime: Failed to SetFileTime.")
 		End If
 
Index: trunk/Include/Classes/System/IO/Path.ab
===================================================================
--- trunk/Include/Classes/System/IO/Path.ab	(revision 406)
+++ trunk/Include/Classes/System/IO/Path.ab	(revision 407)
@@ -247,5 +247,5 @@
 		For i = 0 To ELM(InvalidPathChars.Length)
 			If path.Contains(InvalidPathChars.Substring(i, 1)) Then
-				Throw
+				Throw New ArgumentException("Path.CheckPath: The path contains invalidChars.")
 			End If
 		Next
