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






3.60/5 (6投票s)
2006年11月14日

36118
本文描述了一种将文件递归复制到不同卷的方法。
引言
由于我在.NET v1.1中没有找到将文件复制到另一个卷的方法,所以我自己创建了这个递归方法来实现它。
使用代码
这是FileUtilities
类的代码,它定义了CopiarMoverDirectorio
、CopiarDirectorio
和MoverDirectorio
方法。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日 - 首次版本。