- 浏览: 232747 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
net_liu:
zxptian 写道楼主能把TransferFiles也贴出来 ...
c# Socket 文件的传输 -
zxptian:
楼主能把TransferFiles也贴出来分享下吗?
c# Socket 文件的传输
HttpFile类:
public class HttpFile { public Form1 formm; public int threadh;//线程代号 public string filename;//文件名 public string strUrl;//接收文件的URL public FileStream fs; public HttpWebRequest request; public System.IO.Stream ns; public byte[] nbytes;//接收缓冲区 public int nreadsize;//接收字节数 public HttpFile(Form1 form, int thread)//构造方法 { formm = form; threadh = thread; } public HttpFile()//析构方法 { formm.Dispose(); } public void receive()//接收线程 { filename = formm.filenamew[threadh]; strUrl = formm.strurl; ns = null; nbytes = new byte[512]; nreadsize = 0; fs = new FileStream(filename, System.IO.FileMode.Create); try { request = (HttpWebRequest)HttpWebRequest.Create(strUrl); //接收的起始位置及接收的长度 request.AddRange(formm.filestartw[threadh], formm.filestartw[threadh] + formm.filesizew[threadh]); ns = request.GetResponse().GetResponseStream();//获得接收流 nreadsize = ns.Read(nbytes, 0, 512); while (nreadsize > 0) { fs.Write(nbytes, 0, nreadsize); nreadsize = ns.Read(nbytes, 0, 512); } fs.Close(); ns.Close(); } catch (Exception er) { string message=(er.Message); fs.Close(); } formm.threadw[threadh] = true; } }
窗体代码:
public bool[] threadw; //每个线程结束标志 public string[] filenamew;//每个线程接收文件的文件名 public int[] filestartw;//每个线程接收文件的起始位置 public int[] filesizew;//每个线程接收文件的大小 public string strurl;//接受文件的URL public bool hb;//文件合并标志 public int thread;//进程数 /// <summary> /// 下载 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button1_Click(object sender, EventArgs e) { lblMessage.Text = "正在下载..."; strurl = textBox2.Text.Trim().ToString(); WebRequest request; long filesize = 0; try { request = (HttpWebRequest)HttpWebRequest.Create(strurl); filesize = request.GetResponse().ContentLength;//取得目标文件的长度 request.Abort(); } catch (Exception er) { MessageBox.Show(er.Message); } // 接收线程数 thread = Convert.ToInt32(textBox4.Text.Trim().ToString(), 10); //根据线程数初始化数组 threadw = new bool[thread]; filenamew = new string[thread]; filestartw = new int[thread]; filesizew = new int[thread]; //计算每个线程应该接收文件的大小 int filethread = (int)filesize / thread;//平均分配 int filethreade = filethread + (int)filesize % thread;//剩余部分由最后一个线程完成 //为数组赋值 for (int i = 0; i < thread; i++) { threadw[i] = false;//每个线程状态的初始值为假 filenamew[i] = i.ToString() + ".dat";//每个线程接收文件的临时文件名 if (i < thread - 1) { filestartw[i] = filethread * i;//每个线程接收文件的起始点 filesizew[i] = filethread - 1;//每个线程接收文件的长度 } else { filestartw[i] = filethread * i; filesizew[i] = filethreade - 1; } } //定义线程数组,启动接收线程 Thread[] threadk = new Thread[thread]; HttpFile[] httpfile = new HttpFile[thread]; for (int j = 0; j < thread; j++) { httpfile[j] = new HttpFile(this, j); threadk[j] = new Thread(new ThreadStart(httpfile[j].receive)); threadk[j].Start(); } //启动合并各线程接收的文件线程 Thread hbth = new Thread(new ThreadStart(hbfile)); hbth.Start(); } /// <summary> /// 合并的方法 /// </summary> public void hbfile() { if (this.InvokeRequired) { while (true)//等待 { hb = true; for (int i = 0; i < thread; i++) { if (threadw[i] == false)//有未结束线程,等待 { hb = false; Thread.Sleep(100); break; } } if (hb == true)//所有线程均已结束,停止等待, { break; } } FileStream fs;//开始合并 FileStream fstemp; int readfile; byte[] bytes = new byte[512]; fs = new FileStream(textBox3.Text.Trim().ToString(), System.IO.FileMode.Create); for (int k = 0; k < thread; k++) { fstemp = new FileStream(filenamew[k], System.IO.FileMode.Open); while (true) { readfile = fstemp.Read(bytes, 0, 512); if (readfile > 0) { fs.Write(bytes, 0, readfile); } else { break; } } fstemp.Close(); } fs.Close(); this.lblMessage.Invoke(new ThreadStart(Show) ); } } private void Show() { lblMessage.Text = "下载完成。"; }
- SplitFile2.rar (43.3 KB)
- 下载次数: 8
发表评论
-
List转DataTable(反射)
2012-02-06 10:48 2741List转DataTable(反射) // ... -
DataTable转泛型
2012-01-31 17:39 1277DataTable转泛型 public clas ... -
利用鼠标钩子将鼠标中键转为左键
2011-05-04 13:50 1643利用鼠标钩子将鼠标中键转为左键 鼠标 ... -
C# 命名规范
2011-04-01 13:32 1969C# 命名规范 文章分类:.net编程 ... -
VS2008 快捷键大全
2011-04-01 13:30 915VS2008 快捷键大全[转帖] 文章分类 ... -
C# 中的委托和事件
2011-04-01 13:26 1283缩略显示 C# 中的委托和事件 文章 ... -
C#Winform限制Textbox只能输入数字
2011-04-01 13:20 7480C#Winform限制Textbox ... -
C# 跳转语句(break,continue,goto,return,throw)
2011-04-01 12:38 3427C# 跳转语句(break,continue,goto,r ... -
C#窗体固定在桌面上
2010-11-19 10:25 1647[DllImport("user32.dll& ... -
if-else 都输出的方法
2010-10-12 11:44 1306if-else 都输出的方法 if (new Func< ... -
反射技术
2010-09-15 17:42 921什么是反射? 反射就 ... -
发一个接口做参数的例子
2010-08-06 08:48 956发一个接口做参数的例子 回头接口 using System ... -
C#中使用正则表达式
2010-08-04 13:39 1336C#中的正则表达式包含 ... -
C#的几个技巧
2010-08-04 13:35 8481.如果可能尽量使用接 ... -
反射动态调用类成员
2010-08-04 13:30 981使用反射动态调用类成员,需要Type类的一个方法:Invoke ... -
在vs2005中发送邮件
2010-08-03 16:14 1145在vs2005中发送邮件的方法如下: ... -
XML数据排序
2010-06-30 14:20 3405根据XML数据的Index 来进行排序 方法一: ... -
程序动态升级版本
2010-06-30 10:00 997C#实现程序动态升级版本。通过反射获取本地版本,然后跟服务器中 ... -
将DataGridView 数据导出到Excel
2010-06-25 15:46 5092/// <summary> ... -
将Excel导入到Oracle
2010-06-25 15:39 5416private void btnInsert_Click(o ...
相关推荐
"文件分割工具(日志分割)"就是专门针对这种情况设计的,它能够有效地将大的日志文件拆分成多个小文件,便于管理和操作。 日志文件通常是应用程序或系统运行过程中的记录,包含了关于错误、警告、调试信息等关键...
6. **文件合并**:与文件分割相对应,文件合并是将多个小文件重新组合成原始大文件的过程。这同样需要使用到FileStream和缓冲区,但这次是从多个源文件中读取数据,并写入到一个目标文件中。 现在,让我们来看一下...
RAR压缩文件分割器是一款工具,专门用于处理大体积的RAR压缩文件,将其分割成多个较小的部分,便于管理和传输。在日常工作中,我们可能会遇到需要发送或存储超大文件的情况,这时RAR文件的分割功能就显得尤为实用。...
标题 "文件分割(js脚本).rar" 暗示了这是一个使用JavaScript编写的文件分割工具。JavaScript,简称JS,是一种广泛应用于网页和网络应用的编程语言,尤其在客户端的前端开发中占据主导地位。它允许开发者在用户浏览器...
在Java编程中,文件分割是一项常见的任务,尤其在大数据处理、网络传输或存储优化时显得尤为重要。本示例“java实现文件的分割.rar”提供的SplitFile程序,利用了Java的随机访问流(RandomAccessFile)来实现文件的...
文件分割器文件分割器文件分割器下载后谢谢我吧
4. 网络传输:大文件通过网络传输可能导致速度慢或失败,分割后可以加快上传下载速度。 四、选择文件分割工具的考虑因素 1. 支持的文件格式:不同的工具支持不同的文件类型,确保工具能处理你需要分割的文件类型。 ...
txt 文件分割器txt 文件分割器txt 文件分割器txt 文件分割器txt 文件分割器txt 文件分割器txt 文件分割器txt 文件分割器txt 文件分割器txt 文件分割器txt 文件分割器txt 文件分割器txt 文件分割器
《大文件分割精灵 V1.6:高效管理大型数据的利器》 在信息化时代,大文件的处理成为了许多用户和企业面临的问题。无论是传输、存储还是备份,大文件都可能带来诸多不便。这时,一款优秀的文件分割与合并工具就显得...
3. 共享与分发:在团队协作中,如果需要共享一个大文件,可以先将其分割,让每个成员下载一部分,然后再进行合并,这样可以减少单个人的下载压力。 三、操作流程 1. 下载与安装:首先,从可靠渠道获取名为"kdfg....
【文件分割器 Visual C++】是一个专门为了解决移动存储设备容量限制问题而设计的工具。在日常工作中,我们可能经常遇到大文件无法一次性复制到容量较小的移动设备(如U盘、移动硬盘)上的情况。文件分割器通过将大...
它提供了一个直观的界面,让用户可以轻松选择要分割的CSV文件和希望的分割行数。例如,如果你知道Excel能处理的最大行数,你可以设置这个值,工具会自动将CSV文件按照设定的行数分割成多个小文件,以便于逐个处理或...
"大文本分割器"标签表明这个软件特别适用于处理文本文件,但通常也能处理其他类型的文件,如视频、音频或文档。在Windows 10中,有多种方法可以实现文件分割,包括使用内置功能和第三方软件。 内置的Windows资源...
sql 资源分割文件 迅速
一个将大文件分割秤多个小文件的小例子。 有此类需求的朋友可以参考。 使用VS2010编译。
文件分割器是一种实用工具,主要用于将大文件分解成较小的部分,以便于管理和传输。在现代数字生活中,我们经常遇到文件过大无法直接发送或上传的情况,这时文件分割器就能发挥重要作用。它可以帮助用户轻松地将一个...
3. 网络传输:分割大文件可以加快上传和下载速度,尤其在网络条件不稳定的情况下。 4. 共享与备份:分割文件能简化共享过程,也可以使备份操作更加灵活。 总结,XSplit作为一款高效的文件分割工具,为用户处理大...
在Vue.js框架中,文件的分割与合并是一个常见的需求,特别是在处理大文件上传、分片下载或分布式存储等场景。本文将深入探讨如何利用Vue.js实现这一功能。 首先,我们需要理解文件分割的基本概念。文件分割是指将一...