专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »DotNet » dos复制文件夹:C#文件夹复制的类 »正文

dos复制文件夹:C#文件夹复制的类

来源: 发布时间:星期四, 2009年2月12日 浏览:163次 评论:0


单线程方式复制过程使用事件

using ;
using .Collections.Generic;
using .Text;
using .IO;

Zgke.Copy
{
/// <summary>
/// 文件甲复制
/// [email protected]
/// </summary>
public CopyDirectory
{

/* 使用思路方法
private void button1_Click(object sender, EventArgs e)
{
Zgke.Copy.CopyDirectory _Info = Zgke.Copy.CopyDirectory(@"F:\项目文件\产品化\联络中心V1.4.0\Source", @"E:\Temp");
_Info.MyCopyRun Zgke.Copy.CopyDirectory.CopyRun(_Info_MyCopyRun);
_Info.MyCopyEnd Zgke.Copy.CopyDirectory.CopyEnd(_Info_MyCopyEnd);
_Info.StarCopy;
}

void _Info_MyCopyEnd
{
MessageBox.Show("复制完成");
}
void _Info_MyCopyRun( FileCount, CopyCount, long FileSize, long CopySize, FileName)
{
this.Invoke((MethodInvoker)delegate {
progressBar1.Maximum = FileCount;
progressBar1.Value = CopyCount;
label1.Text = CopySize. + "/" + FileSize.;
label2.Text = FileName;
});
}
*/

/// <summary>
/// 源目录
/// </summary>
private DirectoryInfo _Source;
/// <summary>
/// 目标目录
/// </summary>
private DirectoryInfo _Target;

/// <summary>
/// 文件复制完成
/// </summary>
/// <param name="FileCount">文件数量合计</param>
/// <param name="CopyCount">复制完成数量</param>
/// <param name="FileSize">文件大小合计</param>
/// <param name="CopySize">复制完成大小</param>
/// <param name="FileName">复制完成文件名</param>
public delegate void CopyRun( FileCount, CopyCount,long FileSize,long CopySize, FileName);
public event CopyRun MyCopyRun;
/// <summary>
/// 复制完成
/// </summary>
public delegate void CopyEnd;
public event CopyEnd MyCopyEnd;

private _FileCount = 0;
private _CopyCount = 0;
private long _FileSize = 0;
private long _CopySize = 0;

/// <summary>
/// 复制目录包含文件
/// </summary>
/// <param name="p_SourceDirectory">源目录</param>
/// <param name="p_TargetDirectory">目标目录</param>
public CopyDirectory( p_SourceDirectory, p_TargetDirectory)
{
_Source = DirectoryInfo(p_SourceDirectory);
_Target = DirectoryInfo(p_TargetDirectory);
FileInfo Temp = _Source.GetFileInfos;
}


/// <summary>
/// 开始复制
/// </summary>
public void StarCopy
{
GetFile(_Source);
.Threading.Thread Th = .Threading.Thread( .Threading.ThreadStart(Run));
Th.Start;
}

private void Run
{
Copy(_Source,_Target );
(MyCopyEnd != null) MyCopyEnd;
}

/// <summary>
/// 复制目录到指定目录
/// </summary>
/// <param name="source">源目录</param>
/// <param name="target">目标目录</param>
private void GetFile(DirectoryInfo MySiurceDirectory)
{
foreach (FileInfo _File in MySiurceDirectory.GetFiles) //循环文件
{
_FileCount;
_FileSize _File.Length;
}


foreach (DirectoryInfo _SourceSubDir in MySiurceDirectory.GetDirectories) //循环子目录
{
GetFile(_SourceSubDir);
}
}


/// <summary>
/// 复制目录到指定目录
/// </summary>
/// <param name="source">源目录</param>
/// <param name="target">目标目录</param>
private void Copy(DirectoryInfo p_Source, DirectoryInfo p_Target)
{
(!Directory.Exists(p_Target.FullName))Directory.CreateDirectory(p_Target.FullName);

foreach (FileInfo _File in p_Source.GetFiles) //循环文件
{
_File.CopyTo(Path.Combine(p_Target., _File.Name), true);
_CopyCount;
_CopySize _File.Length;
(MyCopyRun != null) MyCopyRun(_FileCount, _CopyCount, _FileSize, _CopySize, _File.Name);
}

foreach (DirectoryInfo _SourceSubDir in p_Source.GetDirectories) //循环子目录
{
DirectoryInfo _NextDir = p_Target.CreateSubdirectory(_SourceSubDir.Name);
Copy(_SourceSubDir, _NextDir);
}
}

}
}
0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: