xhp5678

专注.NET和设计模式
随笔 - 38, 文章 - 0, 评论 - 66, 引用 - 1
数据加载中……

VB6 基于TCP协议实现局域网内文件夹传送

 

    刚刚拿到这个需求时,为了实现方便(传送文件已经实现,传送文件夹采取压缩的话也只需传送一个文件),计划采取的实现方法是:调用压缩组件,将文件夹压缩成一个文件,传送到另一端;在接收时,解压缩此文件得到文件夹。由此带来的问题是:没有一个免费的压缩文件夹的组件。于是想到的策略是:用shell程序调用dos下的arj.exe压缩。但是由于arjdos工具,有一个文件名的问题:文件名长度超过8位(中文4位),就会自动截断。针对这个问题:又想了一种很笨的解决办法:将传送前,遍历文件夹,记录所有文件和文件夹名,传送时附带传过去,接收端接收完文件,解压缩后,修改文件名。经过这么一折腾,由一个问题带来很多的头痛的问题。(陷入了怪圈)。

       后来经过仔细考虑,觉得用上述方法传送文件夹,有很多的隐患。一:如果文件夹很大或文件很多,发送前的压缩操作需要很长时间,用户可操作性太差;二:由于要压缩文件夹,就需要保存,删除临时文件,如果处理不得当,会错删文件;三:用arj需要修改文件和文件夹名字,改名算法如果不健壮同样是一个隐患。

       综合考虑了以后,决定修改传送算法。基本思路是:既然传送一个文件已经实现,传送文件夹的话,无非是在一个连接过程多进行几次传送文件的过程。详细方法描述:发送文件夹之前,首先遍历文件夹,保存每个子文件夹和文件信息(包括文件相对于选中的文件夹的路径,文件大小,文件名);传送之前,先发送传送请求,附带待传送文件夹的总体信息(文件夹名和文件夹总文件大小),接收端收到请求信息后,保存这些信息,选择保存路径,并发送确认标志符。发送端收到确认标志符,首先传送单个文件的信息(单个文件的大小,文件名);接收端收到后,保存单个文件大小,在本地创建文件,发送请求发送文件内容标志符。发送端收到后开始发送文件体;接收端开始接收文件体,当保存单个文件大小和接收到的数据相等时,请求发送第二个文件的文件信息,依次下去。直到接收到的数据和总文件信息大小相等。发送接收完成标志符。整个传送过程完毕。

       传送过程如下(省略了和服务器端交互过程):

这样,整个传送文件夹过程就结束了。 当然这个过程可能也不完善,以后再慢慢改进。欢迎大家提出意见!

posted on 2005-10-13 12:35 晓攀 阅读(836) 评论(7)  编辑 收藏 所属分类: VB

评论

#1楼    回复  引用  查看    

我觉得。。。。VB6的还是不要放到首页的好

在您提交帖子的时候,请注意您的选择,要发布到首页的话,您选择的是“首页原创精华.NET技术区(包含设计与模式、软件工程、项目管理)”。。。。。但是。。。VB6。。。至少您这篇Blog与.NET没有一点关系。。。。。。
2005-10-13 12:48 | 被遗弃的小指      

#2楼 [楼主]   回复  引用  查看    

谢谢 被遗弃的小指 ,失误失误,已经移走~~ :)
2005-10-13 12:56 | 晓攀      

#3楼    回复  引用  查看    

有没有VC6的源码啊!谢谢
2007-09-22 16:33 | draeag      

#4楼    回复  引用  查看    

不知道你有没有实现啊,有没有源码啊,说的感觉明白了,可就是写不出来啊
2007-09-26 15:30 | draeag      

#5楼 [楼主]   回复  引用  查看    

http://www.cnblogs.com/xhp5678/archive/2005/10/13/253807.html#906722
2007-09-28 10:16 | 晓攀      

#6楼 [楼主]   回复  引用  查看    

有VB6的源代码。
2007-09-28 10:17 | 晓攀      

#7楼    回复  引用  查看    

能不能发我一份啊draeag@163.com谢谢
2007-10-09 13:31 | draeag      

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2005-10-13 12:52 编辑过


相关链接: