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

simen_frankly 2009-01-05 05:34:07
File.Copy是一个单线程,要自己做多线程才能专业一些
但是我在COPY过程中如何知道COPY的进度呢?
比如我COPY文件时,想做一个进度条,就像系统的那样,怎么做?谢谢
...全文
96 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
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到哪了么?

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

试试用AI创作助手写篇文章吧