我用FSO vb自带的filecopy api的copyfile SHFileOperation等都试过,速度都不理想,SHFileOperation最慢.如果文件夹里文件数量多或有百兆以上的大文件,程序就跟死了似的,虽然加了doevents也没有什么作用.看CPU占用倒不会超过50%,但电脑的反应变得明显慢了.我要拷贝的东西,有子目录,有文件. 我把这些要拷贝的文件名字和路径都预先存放到一个集合里了.然后for each .....next 从集合里取出名字路径去拷贝.判断是文件夹的就fso.copyfolder 判断是文件的就FSO.copyfile .不存在拷贝不成功的问题,就是遇到我上面说的情况的时候,程序反应跟死了似的,等拷贝完成后,就一切恢复正常了.虽然我在for each .....next里用了doevents,好像没有任何帮助.文件数量少或文件小的话,基本一切正常.
我拷贝一个759M大小的目录的内容到同一分区的另一目录, 文件数量4831个,子文件夹222个,其中最大的文件285M,最小的文件1K,整个拷贝用时100秒.太慢了.用系统自己的复制粘贴也才120秒. 但好像系统的复制粘贴占用CPU比较大.哪位大虾能告诉我,怎么才能处理好我这种情况的拷贝? 主要是提速,以及不让程序假死.
我拷贝一个759M大小的目录的内容到同一分区的另一目录, 文件数量4831个,子文件夹222个,其中最大的文件285M,最小的文件1K,整个拷贝用时100秒.太慢了.用系统自己的复制粘贴也才120秒. 但好像系统的复制粘贴占用CPU比较大.哪位大虾能告诉我,怎么才能处理好我这种情况的拷贝? 主要是提速,以及不让程序假死.
2 经常整理磁盘,不使其存在太多碎片。从这些旮旯里把文件抠出来,再塞到另一写缝隙里去,效率可想而知。
不让程序假死的话,你可以调用以下api,显示文件拷贝的进度条
Private Declare Function SHFileOperation Lib _
"shell32.dll" Alias "SHFileOperationA" (lpFileOp _
As SHFILEOPSTRUCT) As Long
目录内容更新比较很容易,更新拷贝从原理也很简单,但情况就象我1楼帖子说的那样. 现在我没有用winsock来做,主要考虑文件夹的复杂性,用winsock传输太麻烦了,而且,如果用tcp传输又没有广播功能,用UDP广播,可靠性不够.不知道高手们要解决局域网上目录更新,1台服务器对多台工作站的方式,会采用什么思路呢?
1、你应在服务端用程序自动建一个所有相关或最新文件列表
2、客户端下载列表自己分析需更新文件,分别自建需更新文件的列表,再下载文件
3、若局域网客户机也可互相访问,你还可仿照BT的方式,由不同客户机分担不同文件夹段的更新,这只需在服务器列表中指明位置就行了,也容易实现。
第3个步骤是个好方法,不会呀,能把第3步骤的思路给得再明确些吗?呵呵,真有意思,我在csdn上就提过3个问题,全部是你解答的.哈哈,谢谢.
前面我想的也只是思路,没实际做过,不敢乱说。FTP也好,HTTP也好,我觉得都可满足,只是速度与效率问题。我想得没你说的那么复杂,我甚至认为可以不做专门服务器程序,不用进行通讯,只是将总列表放在服务器一个共享路径下(当然是只读的),每个下载过的机器,都在另一个可写的路径下,留下一个自己下载内容的列表,客户机先在这些列表中搜索是否有客户机可用,若没有或尝试连接不能访问,再去找总列表下的服务器位置去复制。我不了解你们局域网的特定环境,我想肯定是交换机啦,要是HUB那就不要想分享方式了^_^。
因为宽带是你的,机器与机器之间通道都这么宽.怎么BT也不能把这样的通道扩宽!
另外,在"BT"中还有很多很多的信息交换.不但没有助益,还会成为拖累!
如果你是因为不可以让一台机器占用过多的带宽,你可以考虑限流:实现平均分配带宽!
这样的话,建议用Sock来搞!这样就不是单单的复制这么简单了!另外,VB+Winsock请不要过份的幻想这对组合!
然而也不是不能.但对于这么做之后,就不是拷贝文件了.而是同步数据!也就不符合这贴子的主题了.不作评论,见谅
Private Sub Command1_Click()
Shell "xcopy D:\xxx\*.* c:\yyy\*.* /s"
End Sub
如果不想让用户看到copy过程,就这样:
Private Sub Command1_Click()
Shell "xcopy D:\xxx\*.* c:\yyy\*.* /s", vbHide
End Sub
个人人为BT的思想可行。但是必须是你的局域网是交换机而不是HUB。否则BT的方式只会给你添麻烦。
BT的思想基本上就是让你的服务器尽可能的充当一个列表的功能。
就像这样:服务器:“嘿嘿,我更新了文件,谁要?来我这里找!”
客户1:“我要文件A!”
服务器:“客户1,准备接收!其他人等一等!”
客户1:“文件A接受完毕!”服务器:“OK!现在我空闲,谁还要文件?”
客户2:“我要文件B!”
服务器:“客户2,准备接收!其他人等一等!”
客户2:“文件B接受完毕!”服务器:“OK!现在我空闲,谁还要文件?”
客户3:“我要文件A!”
服务器:“客户3,你要的文件在客户1那里,你去找他要!”
客户3(跑到一边去自己跟客户1商量):“客户1,我要文件A!” ……服务器:“现在我空闲,谁还要文件?”
……
……