中の技術日誌
 

わんくまライブラリ Wankuma.IO.Directoryクラス Version1

2006/01/27

この文書はVisual Studio 2003(.NET1.1)をベースに記述されています。それ以降のバージョンや、あなたが読んでいる時点では変更されている可能性があります。
またバージョンアップされている場合にはなんらかかの不具合を含んでいる可能性があります。

ドキュメントへ
Wankuma.IO.Directory1d.htm

ソースファイル直接ダウンロードへ
Wankuma.IO.Directory1c.txt

利用規約へ
../kiyaku.htm

#region Using
using System;
using System.IO;
using System.Collections;
using Dir=System.IO.Directory;
#endregion

namespace Wankuma.IO
{
  /// <summary>
  /// System.IO.Directoryに対応するクラスです。
  /// </summary>
  public class Directory
  {
    #region public static void Copy(string sourceDirName, string destDirName, bool AttributeSetFlag)
    /// <summary>
    /// Directoryをコピーします。
    /// </summary>
    /// <param name="sourceDirName">コピー元ディレクトリ名</param>
    /// <param name="destDirName">コピー先ディレクトリ名</param>
    /// <param name="AttributeSetFlag">ディレクトリを作成するときに属性情報をコピーするかどうかのフラグ</param>
    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)
    /// <summary>
    /// Directoryをコピーします。
    /// 属性情報をコピーします。
    /// </summary>
    /// <param name="sourceDirName">コピー元ディレクトリ名</param>
    /// <param name="destDirName">コピー先ディレクトリ名</param>
    public static void Copy(string sourceDirName, string destDirName)
    {
      Copy(sourceDirName, destDirName, true);
    }
    #endregion
    #region public static string[] GetDirectoriesReflexive(string path)
    /// <summary>
    /// 再帰的にディレクトリの一覧を作成します。
    /// </summary>
    /// <param name="path">検索するパス</param>
    /// <returns>指定したディレクトリ配下のディレクトリツリー</returns>
    /// <exception cref="ArgumentNullException">pathはnullを指定できません。</exception>
    [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)
    /// <summary>
    /// 再帰的にディレクトリの一覧を作成します。
    /// </summary>
    /// <param name="path">検索するパス</param>
    /// <returns>指定したディレクトリ配下のディレクトリツリー</returns>
    /// <exception cref="ArgumentNullException">pathはnullを指定できません。</exception>
    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)
    /// <summary>
    /// 再帰的にディレクトリの一覧を作成します。(内部クラス)
    /// </summary>
    /// <param name="al">ディレクトリ名を格納するArrayList</param>
    /// <param name="path">検索するパス</param>
    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)
    /// <summary>
    /// 再帰的にファイルの一覧を取得します。
    /// </summary>
    /// <param name="TargetDir">取得対象ディレクトリ</param>
    /// <returns>取得したファイルの一覧</returns>
    public static string[] GetFilesRecursion(string TargetDir)
    {
      return GetFilesRecursion(TargetDir, "*", null);
    }
    #endregion
    #region public static string[] GetFilesRecursion(string TargetDir, string[] SearchExtension)
    /// <summary>
    /// 再帰的にファイルの一覧を取得します。
    /// </summary>
    /// <param name="TargetDir">取得対象ディレクトリ</param>
    /// <param name="SearchExtension">検索する拡張子の一覧</param>
    /// <returns>取得したファイルの一覧</returns>
    public static string[] GetFilesRecursion(string TargetDir, string[] SearchExtension)
    {
      return GetFilesRecursion(TargetDir, "*", SearchExtension);
    }
    #endregion
    #region public static string[] GetFilesRecursion(string TargetDir, string SearchPath)
    /// <summary>
    /// 再帰的にファイルの一覧を取得します。
    /// </summary>
    /// <param name="TargetDir">取得対象ディレクトリ</param>
    /// <param name="SearchPath">探すファイルマスク</param>
    /// <returns>取得したファイルの一覧</returns>]
    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)
    /// <summary>
    /// 再帰的にファイルの一覧を取得します。
    /// </summary>
    /// <param name="TargetDir">取得対象ディレクトリ</param>
    /// <param name="SearchPath">探すファイルマスク</param>
    /// <param name="SearchExtension">検索する拡張子の一覧</param>
    /// <returns>取得したファイルの一覧</returns>
    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)
    /// <summary>
    /// 内部 再起ファイル一覧取得
    /// </summary>
    /// <param name="al">結果を格納しておくAllayList</param>
    /// <param name="TargetDir">取得対象ディレクトリ</param>
    /// <param name="SearchPath">探すファイルマスク</param>
    /// <param name="SearchExtension">検索する拡張子の一覧</param>
    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

勉強会: 05/18 大阪 登録受付中

中の技術日誌
コンテンツ
わんくま同盟
わんくま同盟
わんくま同盟
広告
バナー
MVP LOGO
MSMVP Visual C# Since 2004/04-2007/03
MCP LOGO
070-316
姉妹サイト
姉妹サイト:じゃんぬのC#, VB.NET 入門
じゃんぬの
C#, VB.NET 入門
検索
Google

ブログ本家
広告