#region Using
using System;
using System.IO;
using System.Collections;
using Dir=System.IO.Directory;
#endregion
namespace Wankuma.IO
{
///
/// System.IO.Directoryに対応するクラスです。
///
public class Directory
{
#region public static void Copy(string sourceDirName, string destDirName, bool AttributeSetFlag)
///
/// Directoryをコピーします。
///
/// コピー元ディレクトリ名
/// コピー先ディレクトリ名
/// ディレクトリを作成するときに属性情報をコピーするかどうかのフラグ
public static void Copy(string sourceDirName, string destDirName, bool AttributeSetFlag)
{
if (sourceDirName == null)
{
throw new ArgumentNullException("sourceDirName");
}
if (sourceDirName.Length == 0)
{
throw new ArgumentException("未設定です。", "sourceDirName");
}
if (destDirName == null)
{
throw new ArgumentNullException("destDirName");
}
if (destDirName.Length == 0)
{
throw new ArgumentException("未設定です。", "destDirName");
}
//ソースのフルパスを取得する
string srcフルパス = System.IO.Path.GetFullPath(sourceDirName);
if ( srcフルパス.EndsWith(System.IO.Path.DirectorySeparatorChar.ToString()) == true )
{
srcフルパス = srcフルパス.Remove(srcフルパス.Length - 1, 1 );
}
string destフルパス = System.IO.Path.GetFullPath(destDirName);
if ( destフルパス.EndsWith(System.IO.Path.DirectorySeparatorChar.ToString()) == true )
{
destフルパス = destフルパス.Remove(destフルパス.Length - 1, 1 );
}
//コピー先フォルダが存在しなかった場合に作成する
if ( Dir.Exists( destフルパス ) == false )
{
Dir.CreateDirectory(destフルパス);
if ( AttributeSetFlag == true )
{
File.SetAttributes(destフルパス, File.GetAttributes(srcフルパス));
}
}
string[] Dirs = Dir.GetDirectories(srcフルパス);
foreach ( string DirName in Dirs )
{
Copy(DirName, destフルパス + System.IO.Path.DirectorySeparatorChar + System.IO.Path.GetFileName(DirName));
}
string[] Files = Dir.GetFiles(srcフルパス);
foreach ( string FileName in Files )
{
File.Copy(srcフルパス + System.IO.Path.DirectorySeparatorChar + System.IO.Path.GetFileName(FileName), destフルパス + System.IO.Path.DirectorySeparatorChar + System.IO.Path.GetFileName(FileName));
}
}
#endregion
#region public static void Copy(string sourceDirName, string destDirName)
///
/// Directoryをコピーします。
/// 属性情報をコピーします。
///
/// コピー元ディレクトリ名
/// コピー先ディレクトリ名
public static void Copy(string sourceDirName, string destDirName)
{
Copy(sourceDirName, destDirName, true);
}
#endregion
#region public static string[] GetDirectoriesReflexive(string path)
///
/// 再帰的にディレクトリの一覧を作成します。
///
/// 検索するパス
/// 指定したディレクトリ配下のディレクトリツリー
/// pathはnullを指定できません。
[Obsolete("GetDirectoriesRecursion")]
public static string[] GetDirectoriesReflexive(string path)
{
if ( path == null )
{
throw new ArgumentNullException("path", "パスはnullに出来ません。");
}
ArrayList al = new ArrayList();
al.Add(path);
Wankuma.IO.Directory.GetDirectoriesRecursionInternal(al, path);
return (string[])al.ToArray(typeof(string));
}
#endregion
#region public static string[] GetDirectoriesRecursion(string path)
///
/// 再帰的にディレクトリの一覧を作成します。
///
/// 検索するパス
/// 指定したディレクトリ配下のディレクトリツリー
/// pathはnullを指定できません。
public static string[] GetDirectoriesRecursion(string path)
{
if ( path == null )
{
throw new ArgumentNullException("path", "パスはnullに出来ません。");
}
ArrayList al = new ArrayList();
al.Add(path);
Wankuma.IO.Directory.GetDirectoriesRecursionInternal(al, path);
return (string[])al.ToArray(typeof(string));
}
#endregion
#region private static void GetDirectoriesRecursionInternal(ArrayList al, string path)
///
/// 再帰的にディレクトリの一覧を作成します。(内部クラス)
///
/// ディレクトリ名を格納するArrayList
/// 検索するパス
private static void GetDirectoriesRecursionInternal(ArrayList al, string path)
{
string[] paths = System.IO.Directory.GetDirectories(path);
foreach(string getpath in paths)
{
al.Add(getpath);
GetDirectoriesRecursionInternal(al, getpath);
}
}
#endregion
#region public static string[] GetFilesRecursion(string TargetDir)
///
/// 再帰的にファイルの一覧を取得します。
///
/// 取得対象ディレクトリ
/// 取得したファイルの一覧
public static string[] GetFilesRecursion(string TargetDir)
{
return GetFilesRecursion(TargetDir, "*", null);
}
#endregion
#region public static string[] GetFilesRecursion(string TargetDir, string[] SearchExtension)
///
/// 再帰的にファイルの一覧を取得します。
///
/// 取得対象ディレクトリ
/// 検索する拡張子の一覧
/// 取得したファイルの一覧
public static string[] GetFilesRecursion(string TargetDir, string[] SearchExtension)
{
return GetFilesRecursion(TargetDir, "*", SearchExtension);
}
#endregion
#region public static string[] GetFilesRecursion(string TargetDir, string SearchPath)
///
/// 再帰的にファイルの一覧を取得します。
///
/// 取得対象ディレクトリ
/// 探すファイルマスク
/// 取得したファイルの一覧]
public static string[] GetFilesRecursion(string TargetDir, string SearchPath)
{
return GetFilesRecursion(TargetDir, SearchPath, null);
}
#endregion
#region public static string[] GetFilesRecursion(string TargetDir, string SearchPath, string[] SearchExtension)
///
/// 再帰的にファイルの一覧を取得します。
///
/// 取得対象ディレクトリ
/// 探すファイルマスク
/// 検索する拡張子の一覧
/// 取得したファイルの一覧
public static string[] GetFilesRecursion(string TargetDir, string SearchPath, string[] SearchExtension)
{
if ( TargetDir == null )
{
throw new ArgumentNullException("TargetDir");
}
if ( SearchPath == null )
{
throw new ArgumentNullException("SerachPath");
}
ArrayList al = new ArrayList();
InternalGetFilesRecursion(al, TargetDir, SearchPath, SearchExtension);
return (string[])al.ToArray(typeof(string));
}
#endregion
#region private static void InternalGetFilesRecursion(ArrayList al, string TargetDir, string SearchPath, string[] SearchExtension)
///
/// 内部 再起ファイル一覧取得
///
/// 結果を格納しておくAllayList
/// 取得対象ディレクトリ
/// 探すファイルマスク
/// 検索する拡張子の一覧
private static void InternalGetFilesRecursion(ArrayList al, string TargetDir, string SearchPath, string[] SearchExtension)
{
//ディレクトリの一覧を取得する
string[] Dirs = Dir.GetDirectories(TargetDir);
//さらにそのディレクトリの下にもぐっていく
foreach ( string DirName in Dirs )
{
InternalGetFilesRecursion(al, System.IO.Path.Combine(TargetDir, DirName), SearchPath, SearchExtension);
}
//ファイルの一覧を取得する
string[] Files = Dir.GetFiles(TargetDir, SearchPath);
//ファイルの一覧を格納していく
foreach ( string FileName in Files )
{
//検索拡張子が設定されている場合には
if ( SearchExtension != null )
{
//検索拡張子と、今回取得拡張子を見比べて
foreach (string Extension in SearchExtension)
{
if ( Extension.ToUpper() == System.IO.Path.GetExtension(FileName).ToUpper())
{
//追加する
al.Add(System.IO.Path.Combine(TargetDir, FileName));
break;
}
}
}
else
{
//検索拡張子が設定されていない場合には、無条件に追加する。
al.Add(System.IO.Path.Combine(TargetDir, FileName));
}
}
}
#endregion
}//class
}//namespace