65.9K
CodeProject 正在变化。 阅读更多。
Home

将文件复制到不同卷的递归方法

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.60/5 (6投票s)

2006年11月14日

viewsIcon

36118

本文描述了一种将文件递归复制到不同卷的方法。

引言

由于我在.NET v1.1中没有找到将文件复制到另一个卷的方法,所以我自己创建了这个递归方法来实现它。

使用代码

这是FileUtilities类的代码,它定义了CopiarMoverDirectorioCopiarDirectorioMoverDirectorio方法。CopiarMoverDirectorio方法包含主要逻辑,其他两个是包装器。

using System;
using System.IO;

namespace RMORTEGA77.Utils
{
   public class FileUtilities
   {
 
      #region Copy, Move folders - Rodolfo Ortega
      /// <summary>
      /// Recursive procedure to copy or move folder to another volume
      /// </summary>
      /// <param name="d">DirectoryInfo structure of origin</param>
      /// <param name="Destino">Destiny path, including folder</param>
      /// <param name="BorraOrigen">If true, deletes origin</param>
      /// <param name="CreaDirVacios">If true move also if empty</param>
      private static void CopiarMoverDirectorio(DirectoryInfo d, 
              string Destino, bool BorraOrigen, bool CreaDirVacios) 
      { 
         // Get files.
         FileInfo[] fis = d.GetFiles();
         // Create the directory destiny, if CreaDirVacios or contains files
         if ((fis.Length > 0) || (CreaDirVacios))
            Directory.CreateDirectory(Destino);
         foreach (FileInfo fi in fis) 
         { 
            fi.CopyTo(Destino + "\\" + fi.Name);
            // Delete the origin file if BorraOrigen
            if (BorraOrigen)
               fi.Delete(); 
         }
         // Recursive copy children dirs
         DirectoryInfo[] dis = d.GetDirectories();
         foreach (DirectoryInfo di in dis) 
         {
            CopiarMoverDirectorio(di,Destino + "\\" + di.Name, 
                                  BorraOrigen, CreaDirVacios); 
         }
         // Delete the origin dir if BorraOrigen
         if (BorraOrigen)
            d.Delete();
      }

      /// <summary>
      /// Copy a folder. Wrapper for recursive procedure call.
      /// </summary>
      /// <param name="Origen">Origin path</param>
      /// <param name="Destino">Destiny path, including folder</param>
      public static void CopiarDirectorio( string Origen, string Destino)
      {
         CopiarMoverDirectorio(new DirectoryInfo(Origen), 
                               Destino, false, false);
      }

      /// <summary>
      ///  Move a folder. Wrapper for recursive procedure call.
      /// </summary>
      /// <param name="Origen">Origin path</param>
      /// <param name="Destino">Destiny path, including folder</param> 
      /// <remarks>If volume if the same,
      /// we use standard Directory.Move method </remarks>
      public static void MoverDirectorio( string Origen, string Destino)
      {
         try
         {
            Directory.Move( Origen, Destino);
         }
         catch (IOException)
         {
            CopiarMoverDirectorio(new DirectoryInfo(Origen), 
                                  Destino, true, false);
         }
      }
 
      #endregion - Rodolfo
   }

}

关注点

就这样!它对我有用。

历史

  • 2006年11月13日 - 首次版本。
© . All rights reserved.