• 全部
  • C#综合技术
  • C#互联网桌面应用
  • AppLauncher
  • WinForm&WPF
  • C#开发新技术
  • 问答

文件copy的多线程问题,来者都有分,不够再加~~~

simen_frankly 2009-01-05 05:34:07
File.Copy是一个单线程,要自己做多线程才能专业一些
但是我在COPY过程中如何知道COPY的进度呢?
比如我COPY文件时,想做一个进度条,就像系统的那样,怎么做?谢谢
...全文
72 点赞 收藏 12
写回复
12 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
homejiji 2009-01-06
学习一下。。
回复
acns 2009-01-06
sorry, 我的代码有问题。
请把
sw.Write(sr.Peek());
改成:
sw.Write((char)sr.Read());
回复
wo6522317 2009-01-06
[Quote=引用 4 楼 lunat 的回复:]
使用一个静态类,保存当前拷贝的文件总大小,和已经拷贝的大小,以及一个更新进度条的方法
在每个进程里面实时更新已拷贝的字节数,并调用更新进度条...
[/Quote]
.
回复
acns 2009-01-06

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace threadfilecopy
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
dFileCopy tr = new dFileCopy(FileCopy);
tr.BeginInvoke(@"c:\DXperience-7.3.7.exe", @"c:\b.exe", null , null);
}

delegate void dFileCopy(string sourceFileName, string destFileName);
void FileCopy(string sourceFileName, string destFileName)
{
if (!System.IO.File.Exists(sourceFileName))
new System.IO.IOException("File not exist.");

System.IO.FileInfo fi = new System.IO.FileInfo(sourceFileName);
System.IO.StreamReader sr = new System.IO.StreamReader(sourceFileName);

using (System.IO.StreamWriter sw = new System.IO.StreamWriter(destFileName, false))
{
for (int i = 0; i < fi.Length; i++)
{
sw.Write(sr.Peek());
if (i % (fi.Length / 100) == 0)
SetProcess(i / (fi.Length / 100));
}
}

}

delegate void process(double value);
void SetProcess(double value)
{
if (this.InvokeRequired)
this.Invoke(new process(SetProcess), value);
else
this.Text = value.ToString() + " %";

if (value > 0)
{ }
}

}
}


这里用了Peek来读,效率没有ReadBlock高,你自己可以改进。
回复
lunat 2009-01-06
使用一个静态类,保存当前拷贝的文件总大小,和已经拷贝的大小,以及一个更新进度条的方法
在每个进程里面实时更新已拷贝的字节数,并调用更新进度条...
回复
simen_frankly 2009-01-06
怎样实现在copy的时候加进度条呢?
回复
hangang7403 2009-01-06
up
回复
gouyear 2009-01-06
学习
回复
Jave.Lin 2009-01-06
学习学习。
回复
qingdaowxz 2009-01-06
6楼的方法好
回复
APP开发王 2009-01-05
不知道估计和系统的COPY不一样,也许是直接COPY到内存里再写到目标的?不会吧
逐个字节copy。。?也可以只是可能不同场合需求不一样
回复
cuike519 2009-01-05
逐个字节copy你能不知道copy到哪了么?
回复
相关推荐
发帖
C#
创建于2007-09-28

10.5w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2009-01-05 05:34
社区公告

让您成为最强悍的C#开发者