C#文件目录常用操作的类

  •   1     *
      2 
      3       using System;
      4       using System.IO;
      5       using System.Xml;
      6 
      7       namespace FileOperate
      8       {
      9           /// <summary>
     10           /// FileDirectoryUtility 类,方法不包含异常处理
     11           /// </summary>
     12           public class FileDirectoryUtility
     13           {
     14               /// <summary>
     15               /// 路径分割符
     16               /// </summary>
     17               private const string PATH_SPLIT_CHAR = "\\";
     18 
     19               /// <summary>
     20               /// 构造函数
     21               /// </summary>
     22               private FileDirectoryUtility()
     23               {
     24               }
     25 
     26               /// <summary>
     27               /// 复制指定目录的所有文件,不包含子目录及子目录中的文件
     28               /// </summary>
     29               /// <param name="sourceDir">原始目录</param>
     30               /// <param name="targetDir">目标目录</param>
     31               /// <param name="overWrite">如果为true,表示覆盖同名文件,否则不覆盖</param>
     32               public static void CopyFiles(string sourceDir, string targetDir, bool overWrite)
     33               {
     34                   CopyFiles(sourceDir, targetDir, overWrite, false);
     35               }
     36 
     37               /// <summary>
     38               /// 复制指定目录的所有文件
     39               /// </summary>
     40               /// <param name="sourceDir">原始目录</param>
     41               /// <param name="targetDir">目标目录</param>
     42               /// <param name="overWrite">如果为true,覆盖同名文件,否则不覆盖</param>
     43               /// <param name="copySubDir">如果为true,包含目录,否则不包含</param>
     44               public static void CopyFiles(string sourceDir, string targetDir, bool overWrite, bool copySubDir)
     45               {
     46                   //复制当前目录文件
     47                   foreach (string sourceFileName in Directory.GetFiles(sourceDir))
     48                   {
     49                       string targetFileName = Path.Combine(targetDir, sourceFileName.Substring(sourceFileName.LastIndexOf(PATH_SPLIT_CHAR) + 1));
     50 
     51                       if (File.Exists(targetFileName))
     52                       {
     53                           if (overWrite == true)
     54                           {
     55                               File.SetAttributes(targetFileName, FileAttributes.Normal);
     56                               File.Copy(sourceFileName, targetFileName, overWrite);
     57                           }
     58                       }
     59                       else
     60                       {
     61                           File.Copy(sourceFileName, targetFileName, overWrite);
     62                       }
     63                   }
     64                   //复制子目录
     65                   if (copySubDir)
     66                   {
     67                       foreach (string sourceSubDir in Directory.GetDirectories(sourceDir))
     68                       {
     69                           string targetSubDir = Path.Combine(targetDir, sourceSubDir.Substring(sourceSubDir.LastIndexOf(PATH_SPLIT_CHAR) + 1));
     70                           if (!Directory.Exists(targetSubDir))
     71                               Directory.CreateDirectory(targetSubDir);
     72                           CopyFiles(sourceSubDir, targetSubDir, overWrite, true);
     73                       }
     74                   }
     75               }
     76 
     77               /// <summary>
     78               /// 剪切指定目录的所有文件,不包含子目录
     79               /// </summary>
     80               /// <param name="sourceDir">原始目录</param>
     81               /// <param name="targetDir">目标目录</param>
     82               /// <param name="overWrite">如果为true,覆盖同名文件,否则不覆盖</param>
     83               public static void MoveFiles(string sourceDir, string targetDir, bool overWrite)
     84               {
     85                   MoveFiles(sourceDir, targetDir, overWrite, false);
     86               }
     87 
     88               /// <summary>
     89               /// 剪切指定目录的所有文件
     90               /// </summary>
     91               /// <param name="sourceDir">原始目录</param>
     92               /// <param name="targetDir">目标目录</param>
     93               /// <param name="overWrite">如果为true,覆盖同名文件,否则不覆盖</param>
     94               /// <param name="moveSubDir">如果为true,包含目录,否则不包含</param>
     95               public static void MoveFiles(string sourceDir, string targetDir, bool overWrite, bool moveSubDir)
     96               {
     97                   //移动当前目录文件
     98                   foreach (string sourceFileName in Directory.GetFiles(sourceDir))
     99                   {
    100                       string targetFileName = Path.Combine(targetDir, sourceFileName.Substring(sourceFileName.LastIndexOf(PATH_SPLIT_CHAR) + 1));
    101                       if (File.Exists(targetFileName))
    102                       {
    103                           if (overWrite == true)
    104                           {
    105                               File.SetAttributes(targetFileName, FileAttributes.Normal);
    106                               File.Delete(targetFileName);
    107                               File.Move(sourceFileName, targetFileName);
    108                           }
    109                       }
    110                       else
    111                       {
    112                           File.Move(sourceFileName, targetFileName);
    113                       }
    114                   }
    115                   if (moveSubDir)
    116                   {
    117                       foreach (string sourceSubDir in Directory.GetDirectories(sourceDir))
    118                       {
    119                           string targetSubDir = Path.Combine(targetDir, sourceSubDir.Substring(sourceSubDir.LastIndexOf(PATH_SPLIT_CHAR) + 1));
    120                           if (!Directory.Exists(targetSubDir))
    121                               Directory.CreateDirectory(targetSubDir);
    122                           MoveFiles(sourceSubDir, targetSubDir, overWrite, true);
    123                           Directory.Delete(sourceSubDir);
    124                       }
    125                   }
    126               }
    127 
    128               /// <summary>
    129               /// 删除指定目录的所有文件,不包含子目录
    130               /// </summary>
    131               /// <param name="targetDir">操作目录</param>
    132               public static void DeleteFiles(string targetDir)
    133               {
    134                   DeleteFiles(targetDir, false);
    135               }
    136 
    137               /// <summary>
    138               /// 删除指定目录的所有文件和子目录
    139               /// </summary>
    140               /// <param name="targetDir">操作目录</param>
    141               /// <param name="delSubDir">如果为true,包含对子目录的操作</param>
    142               public static void DeleteFiles(string targetDir, bool delSubDir)
    143               {
    144                   foreach (string fileName in Directory.GetFiles(targetDir))
    145                   {
    146                       File.SetAttributes(fileName, FileAttributes.Normal);
    147                       File.Delete(fileName);
    148                   }
    149                   if (delSubDir)
    150                   {
    151                       DirectoryInfo dir = new DirectoryInfo(targetDir);
    152                       foreach (DirectoryInfo subDi in dir.GetDirectories())
    153                       {
    154                           DeleteFiles(subDi.FullName, true);
    155                           subDi.Delete();
    156                       }
    157                   }
    158               }
    159 
    160               /// <summary>
    161               /// 创建指定目录
    162               /// </summary>
    163               /// <param name="targetDir"></param>
    164               public static void CreateDirectory(string targetDir)
    165               {
    166                   DirectoryInfo dir = new DirectoryInfo(targetDir);
    167                   if (!dir.Exists)
    168                       dir.Create();
    169               }
    170 
    171               /// <summary>
    172               /// 建立子目录
    173               /// </summary>
    174               /// <param name="targetDir">目录路径</param>
    175               /// <param name="subDirName">子目录名称</param>
    176               public static void CreateDirectory(string parentDir, string subDirName)
    177               {
    178                   CreateDirectory(parentDir + PATH_SPLIT_CHAR + subDirName);
    179               }
    180 
    181               /// <summary>
    182               /// 删除指定目录
    183               /// </summary>
    184               /// <param name="targetDir">目录路径</param>
    185               public static void DeleteDirectory(string targetDir)
    186               {
    187                   DirectoryInfo dirInfo = new DirectoryInfo(targetDir);
    188                   if (dirInfo.Exists)
    189                   {
    190                       DeleteFiles(targetDir, true);
    191                       dirInfo.Delete(true);
    192                   }
    193               }
    194 
    195               /// <summary>
    196               /// 删除指定目录的所有子目录,不包括对当前目录文件的删除
    197               /// </summary>
    198               /// <param name="targetDir">目录路径</param>
    199               public static void DeleteSubDirectory(string targetDir)
    200               {
    201                   foreach (string subDir in Directory.GetDirectories(targetDir))
    202                   {
    203                       DeleteDirectory(subDir);
    204                   }
    205               }
    206 
    207               /// <summary>
    208               /// 将指定目录下的子目录和文件生成xml文档
    209               /// </summary>
    210               /// <param name="targetDir">根目录</param>
    211               /// <returns>返回XmlDocument对象</returns>
    212               public static XmlDocument CreateXml(string targetDir)
    213               {
    214                   XmlDocument myDocument = new XmlDocument();
    215                   XmlDeclaration declaration = myDocument.CreateXmlDeclaration("1.0""utf-8"null);
    216                   myDocument.AppendChild(declaration);
    217                   XmlElement rootElement = myDocument.CreateElement(targetDir.Substring(targetDir.LastIndexOf(PATH_SPLIT_CHAR) + 1));
    218                   myDocument.AppendChild(rootElement);
    219                   foreach (string fileName in Directory.GetFiles(targetDir))
    220                   {
    221                       XmlElement childElement = myDocument.CreateElement("File");
    222                       childElement.InnerText = fileName.Substring(fileName.LastIndexOf(PATH_SPLIT_CHAR) + 1);
    223                       rootElement.AppendChild(childElement);
    224                   }
    225                   foreach (string directory in Directory.GetDirectories(targetDir))
    226                   {
    227                       XmlElement childElement = myDocument.CreateElement("Directory");
    228                       childElement.SetAttribute("Name", directory.Substring(directory.LastIndexOf(PATH_SPLIT_CHAR) + 1));
    229                       rootElement.AppendChild(childElement);
    230                       CreateBranch(directory, childElement, myDocument);
    231                   }
    232                   return myDocument;
    233               }
    234 
    235               /// <summary>
    236               /// 生成Xml分支
    237               /// </summary>
    238               /// <param name="targetDir">子目录</param>
    239               /// <param name="xmlNode">父目录XmlDocument</param>
    240               /// <param name="myDocument">XmlDocument对象</param>
    241               private static void CreateBranch(string targetDir, XmlElement xmlNode, XmlDocument myDocument)
    242               {
    243                   foreach (string fileName in Directory.GetFiles(targetDir))
    244                   {
    245                       XmlElement childElement = myDocument.CreateElement("File");
    246                       childElement.InnerText = fileName.Substring(fileName.LastIndexOf(PATH_SPLIT_CHAR) + 1);
    247                       xmlNode.AppendChild(childElement);
    248                   }
    249                   foreach (string directory in Directory.GetDirectories(targetDir))
    250                   {
    251                       XmlElement childElement = myDocument.CreateElement("Directory");
    252                       childElement.SetAttribute("Name", directory.Substring(directory.LastIndexOf(PATH_SPLIT_CHAR) + 1));
    253                       xmlNode.AppendChild(childElement);
    254                       CreateBranch(directory, childElement, myDocument);
    255                   }
    256               }
    257           }
    258       }
    259 
    260 


posted @ 2010-01-27 10:37  SoLo.  阅读(1251)  评论(0)    收藏  举报