中の技術日誌
 

わんくまライブラリ Wankuma.IO.Directoryクラス DeleteRecursionメソッド Version1

2006/02/14

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

ドキュメントへ
Directory.DeleteRecursion1d.htm

ソースファイル直接ダウンロードへ
Directory.DeleteRecursion1c.txt

利用規約へ
../kiyaku.htm

#region Using
using System;
using System.Collections.Generic;
using System.Text;
#endregion

namespace Wankuma.IO
{
  public static partial class Directory
  {
    #region public static void DeleteRecursion(string path)
    /// <summary>
    /// ディレクトリを再帰的に削除します。
    /// System.IO.Directory.Deleteと違うのはリードオンリーファイルも削除します。
    /// また特殊フォルダ、ルートフォルダは削除できません。
    /// </summary>
    /// <param name="path">削除対象のフォルダパス</param>
    public static void DeleteRecursion(string path)
    {
      //スペシャルフォルダの列挙子配列を取得する
      System.Environment.SpecialFolder[] Values = (System.Environment.SpecialFolder[])Enum.GetValues(typeof(System.Environment.SpecialFolder));
      //特殊フォルダそのものでないか確認する。
      Array.ForEach<System.Environment.SpecialFolder>(Values, delegate(System.Environment.SpecialFolder folder)
      {
        string SpecialPath = System.Environment.GetFolderPath(folder);
        if ( SpecialPath == path )
        {
          throw new UnauthorizedAccessException(string.Format("特殊フォルダは削除できません。{0}", folder.ToString()));
        }
      });
      //ドライブのルートもチェックを行う
      if (System.IO.Path.GetPathRoot(path) == path)
      {
        throw new UnauthorizedAccessException(string.Format("ルートフォルダは削除できません。{0}", path));
      }
      //実際の削除処理を行う
      DeleteRecursionNoCheck(path);
    }
    #endregion

    /// <summary>
    /// ディレクトリを再帰的に削除します。
    /// System.IO.Directory.Deleteと違うのはリードオンリーファイルも削除します。
    /// </summary>
    /// <param name="path">削除対象のフォルダパス</param>
    public static void DeleteRecursionNoCheck(string path)
    {
      //指定フォルダは以下に存在するすべてのファイルの一覧を取得する
      string[] Files = System.IO.Directory.GetFiles(path, "*", System.IO.SearchOption.AllDirectories);
      //ファイルをすべて削除する
      Array.ForEach<string>(Files, delegate(string FileName)
      {
        //ファイルの属性を取得する
        System.IO.FileAttributes fa = System.IO.File.GetAttributes(FileName);
        //リードオンリーがついている場合には
        if ((fa & System.IO.FileAttributes.ReadOnly) == System.IO.FileAttributes.ReadOnly)
        {
          //リードオンリーをはずす
          System.IO.File.SetAttributes(FileName, fa ^ System.IO.FileAttributes.ReadOnly);
        }
        //削除する
        System.IO.File.Delete(FileName);
      });
      //ディレクトリを削除する
      System.IO.Directory.Delete(path, true);
    }
  }
}

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

ブログ本家
広告