#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