求助:需要用C#写一个COPY大文件的程序 你每次读取500K-1M字节,就这么循环下不就行了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 namespace MainCopySys{ public delegate void Complete(bool state); public delegate void ProcessBoxChange(int persent); public class FileCopy { private string sourceFile; public string SourceFile { get { return sourceFile; } set { sourceFile = value; } } private string destFile; public string DestFile { get { return destFile; } set { destFile = value; } } private FileStream dest; private FileStream source; private AsyncCallback call; public Complete ReportResult; /// <summary> /// 进度条数据 /// </summary> private int percent = 0; public ProcessBoxChange ProcessChanged; /// <summary> /// 作为缓冲区 /// </summary> private byte[] buffer; /// <summary> /// 带参构造器 /// </summary> /// <param name="sourceFile"></param> /// <param name="destFile"></param> public FileCopy(string sourceFile, string destFile) { } /// <summary> /// 无参构造器 /// </summary> public FileCopy() : this(string.Empty, string.Empty) { } /// <summary> /// 同步复制 /// </summary> public void SynCopy() { try { source = new FileStream(SourceFile, FileMode.Open); dest = new FileStream(DestFile, FileMode.Create); //对源流的字节块进行百分比转换确保每行都能转换采用数学的Ceiling方法 int length = (int)Math.Ceiling((double)source.Length / 100); buffer = new byte[length]; //对源流字节写入缓冲区的数据 int len = 0; while ((len = source.Read(buffer, 0, length)) > 0) { //反读缓冲区 dest.Write(buffer, 0, len); } if (ReportResult != null) { ReportResult(true); } } catch { if (ReportResult != null) { ReportResult(false); } } finally { source.Close(); dest.Close(); } } /// <summary> /// 异步复制 /// </summary> public void AsynCopy() { source = new FileStream(SourceFile, FileMode.Open, FileAccess.Read, FileShare.Read, 5000, true); dest = new FileStream(DestFile, FileMode.Create); int len = (int)Math.Ceiling((double)source.Length / 100); buffer = new byte[len]; //委托的初始化参数表中使用“方法名” call = new AsyncCallback(CallBack); source.BeginRead(buffer, 0, buffer.Length, call, null); } /// <summary> /// 实现相应异步操作完成时的状态 /// </summary> /// <param name="ir">接口异步操作状态</param> private void CallBack(IAsyncResult ir) { int count = source.EndRead(ir); if (count > 0) { dest.Write(buffer, 0, count); if (ProcessChanged != null) { ProcessChanged(++percent); } source.BeginRead(buffer, 0, buffer.Length, call, null); } else { dest.Close(); source.Close(); } } }}此代码需要怎么改进呢 ? Winform打开浏览器的简单问题 Winfrom连接数据库 C++ 如何转换到 C#? C#关于星相问题? 求助,在上海的进!~ 如何在gridview中新增一空编辑行? Codesmith如何将结果输出到文件阿 怎么在vs.net 中看到打印的数据阿? 请大家帮忙看下这个算法应该怎么实现 怎样将数据库中所有的表绑定到comboBox中,撒分!!! vs2008 在windows7下无法预览web页面 这是关于northwind数据库查询的c#代码,无论怎么查,都是返回无结果,纳闷??????????那位高手帮妹妹查查看,先谢了
{ public delegate void Complete(bool state);
public delegate void ProcessBoxChange(int persent); public class FileCopy
{
private string sourceFile; public string SourceFile
{
get { return sourceFile; }
set { sourceFile = value; }
}
private string destFile; public string DestFile
{
get { return destFile; }
set { destFile = value; }
} private FileStream dest;
private FileStream source; private AsyncCallback call; public Complete ReportResult; /// <summary>
/// 进度条数据
/// </summary> private int percent = 0;
public ProcessBoxChange ProcessChanged; /// <summary>
/// 作为缓冲区
/// </summary>
private byte[] buffer; /// <summary>
/// 带参构造器
/// </summary>
/// <param name="sourceFile"></param>
/// <param name="destFile"></param>
public FileCopy(string sourceFile, string destFile)
{ }
/// <summary>
/// 无参构造器
/// </summary>
public FileCopy()
: this(string.Empty, string.Empty)
{ } /// <summary>
/// 同步复制
/// </summary>
public void SynCopy()
{
try
{
source = new FileStream(SourceFile, FileMode.Open);
dest = new FileStream(DestFile, FileMode.Create);
//对源流的字节块进行百分比转换确保每行都能转换采用数学的Ceiling方法
int length = (int)Math.Ceiling((double)source.Length / 100);
buffer = new byte[length]; //对源流字节写入缓冲区的数据
int len = 0;
while ((len = source.Read(buffer, 0, length)) > 0)
{
//反读缓冲区
dest.Write(buffer, 0, len);
}
if (ReportResult != null)
{
ReportResult(true);
}
}
catch
{
if (ReportResult != null)
{
ReportResult(false);
}
}
finally
{
source.Close();
dest.Close();
}
}
/// <summary>
/// 异步复制
/// </summary>
public void AsynCopy()
{
source = new FileStream(SourceFile, FileMode.Open, FileAccess.Read, FileShare.Read, 5000, true);
dest = new FileStream(DestFile, FileMode.Create);
int len = (int)Math.Ceiling((double)source.Length / 100);
buffer = new byte[len];
//委托的初始化参数表中使用“方法名”
call = new AsyncCallback(CallBack);
source.BeginRead(buffer, 0, buffer.Length, call, null);
} /// <summary>
/// 实现相应异步操作完成时的状态
/// </summary>
/// <param name="ir">接口异步操作状态</param>
private void CallBack(IAsyncResult ir)
{
int count = source.EndRead(ir);
if (count > 0)
{
dest.Write(buffer, 0, count); if (ProcessChanged != null)
{
ProcessChanged(++percent);
} source.BeginRead(buffer, 0, buffer.Length, call, null);
}
else
{
dest.Close();
source.Close();
}
}
}
}此代码需要怎么改进呢 ?