请问什么方法能够得到文件拷贝的速率?(急!!)

TommyXian 2003-08-20 02:17:20
如题。

大虾帮帮忙啊~~~~~
...全文
157 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
道素 2003-08-20
  • 打赏
  • 举报
回复
Private Sub Option2_Click(Index As Integer)

'this was missing from previous
'posts. Thanks to Sylvain Hamel
'for noticing!
FO_FUNC = CLng(Index)

'disable the Method frame
'if the action <> delete
frDeleteMethod.Enabled = Option2(FileDelete).Value = True

End Sub


Private Function GetOptionFlags() As Long

'Iterate through the options,
'and build the flag variable
'according to the user selection.

'can only have one of these, so ..
If Option1(0).Value Then GetOptionFlags= FOF_ALLOWUNDO

'these can be multiple
If Check1.Value Then GetOptionFlags = GetOptionFlags Or FOF_SILENT
If Check2.Value Then GetOptionFlags = GetOptionFlags Or FOF_SIMPLEPROGRESS
If Check3.Value Then GetOptionFlags = GetOptionFlags Or FOF_NOCONFIRMATION

End Function


Private Function GetTempDir() As String

Dim nSize As Long
Dim tmp As String

tmp = Space$(256)
nSize = Len(tmp)
Call GetTempPath(nSize, tmp)

GetTempDir = TrimNull(tmp)

End Function


Private Function TrimNull(item As String)

Dim pos As Long

'double check that there is a
'vbNullChar (Chr$(0)) in the string
pos = InStr(item, vbNullChar)
If pos Then
TrimNull = Left$(item, pos - 1)
Else
TrimNull = item
End If

End Function


Private Sub ShellDelete(sFileArray() As String, sDestination As String)

'Note: sDestination (the pTo member of
'the SHFILEOPSTRUCT) is ignored for deletion.
'
'In addition, a DWORD-alignment problem exists
'in the shf Type. This means you can not
'use the shf hNameMaps or sProgress
'members without significant code changes to
'assure DWORD alignment is corrected. See the
'MS KB for information. If you attempt to use
'these members without following the KB and GPF,
'this alignment issue is probably the cause.

'working variables
Dim cnt As Long
Dim sFiles As String
Dim shf As SHFILEOPSTRUCT

'create a single string of files from the
'passed file array, each separated by nulls
For cnt = LBound(sFileArray) To UBound(sFileArray)
sFiles = sFiles & sFileArray(cnt) & vbNullChar
Next

'add a final null to double-null
'terminate the string
sFiles = sFiles & vbNullChar

'determine the user's options selected
FOF_FLAGS = GetOptionFlags()

'set up the options
With shf
.wFunc = FO_FUNC 'action to take place
.pFrom = sFiles 'the files to act on
.pTo = sDestination 'the destination, if not recycle
.fFlags = FOF_FLAGS 'special flags (FOF_*)
End With

'and perform the chosen operation
Call SHFileOperation(shf)

End Sub
'--end block--'

One command button (Command1)
A FileListBox control (File1). Set the FileListBox MultiSelect property to 1 - Single
A DirListBox control to provide the current path (Dir1)
A label (Label1) above the FileListBox.
Two large frames (Frame1 & Frame2)
Inside Frame1 (titled SHFileOperation Actions) draw a smaller frame (name it frDeleteMethod) and into it draw two option buttons in a control array (Option1(0) and Option1(1)). This corresponds to the two Method buttons in the illustration ("to Recycle Bin" and "permanently").
Still inside Frame1, but outside of frDeleteMethod, draw four more option buttons (Option2(0) - Option2(3)), then delete Option2(0) so that only Option2(1), Option2(2) and Option2(3) remain. This allows the index of the buttons to directly correspond with the constant values for move-1, copy-2 and delete-3). Renaming files is not shown in this demonstration.
Inside Frame2, add three checkboxes (Check1, Check 2, Check 3).

道素 2003-08-20
  • 打赏
  • 举报
回复
Option Explicit
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Copyright ©1996-2003 VBnet, Randy Birch, All Rights Reserved.
' Some pages may also contain other copyrights by the author.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Distribution: You can freely use this code in your own
' applications, but you may not reproduce
' or publish this code on any web site,
' online service, or distribute as source
' on any media without express permission.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Type SHFILEOPSTRUCT
hWnd As Long
wFunc As Long
pFrom As String
pTo As String
fFlags As Integer
fAborted As Boolean
hNameMaps As Long
sProgress As String
End Type

'File Operations
Private Const FO_MOVE As Long = &H1
Private Const FO_COPY As Long = &H2
Private Const FO_DELETE As Long = &H3
Private Const FO_RENAME As Long = &H4

'File Operation Flags
Private Const FOF_MULTIDESTFILES As Long = &H1
Private Const FOF_CONFIRMMOUSE As Long = &H2
Private Const FOF_SILENT As Long = &H4 'don't create progress/report
Private Const FOF_RENAMEONCOLLISION As Long = &H8
Private Const FOF_NOCONFIRMATION As Long = &H10 'don't prompt the user.
Private Const FOF_WANTMAPPINGHANDLE As Long = &H20 'Fill in SHFILEOPSTRUCT.hNameMappings
'Must be freed using SHFreeNameMappings
Private Const FOF_ALLOWUNDO As Long = &H40
Private Const FOF_FILESONLY As Long = &H80 'on *.*, do only files
Private Const FOF_SIMPLEPROGRESS As Long = &H100 'don't show names of files
Private Const FOF_NOCONFIRMMKDIR As Long = &H200 'don't confirm making any needed dirs
Private Const FOF_NOERRORUI As Long = &H400 'don't put up error UI
Private Const FOF_NORECURSION As Long = &H1000 'don't recurse into directories
Private Const FOF_NOCOPYSECURITYATTRIBS As Long = &H800 'don't copy NT file Security Attributes
Private Const FOF_NO_CONNECTED_ELEMENTS As Long = &H2000 'Shell v5+: don't operate on connected file elements
Private Const FOF_WANTNUKEWARNING As Long = &H4000 'Shell v5+: during delete operation, warn if
'nuking instead of recycling (partially
'overrides FOF_NOCONFIRMATION)
Private Const FOF_NORECURSEREPARSE As Long = &H8000 'Shell v5.1+: treat reparse points as
'objects, not containers

Private Declare Function GetTempPath Lib "kernel32" _
Alias "GetTempPathA" _
(ByVal nSize As Long, _
ByVal lpBuffer As String) As Long

Private Declare Function SHFileOperation Lib "shell32" _
Alias "SHFileOperationA" _
(lpFileOp As SHFILEOPSTRUCT) As Long

'FO_FUNC is determined by the
'type of SHFileOperation action chosen
'(move/delete/rename/copy)
Dim FO_FUNC As Long

'FOF_FLAGS is determined by the
'both the SHFileOperation Actions/Method
'frame and the SHFileOperation Options
'frame choices(delete/recycle/simple
'progress/no confirm etc.)
Dim FOF_FLAGS As Long

'for ease of reading, substitute constants
'for numbers in code SHFileOperationAction
'option button constants
Const FileMove As Long = 1
Const FileCopy As Long = 2
Const FileDelete As Long = 3


Private Sub Form_Load()

Me.Move (Screen.Width - Me.Width) \ 2, (Screen.Height - Me.Height) \ 2

Option1(0).Caption = "to the Recycle Bin"
Option1(0).Value = True
Option1(1).Caption = "permanently"
Option2(FileMove).Caption = "Move files to temp folder"
Option2(FileCopy).Caption = "Copy files to temp folder"
Option2(FileDelete).Caption = "Delete ..."
Option2(FileDelete).Value = True

Check1.Caption = "Don't show operation (silent)"
Check2.Caption = "Don't show filenames for multiple deletes"
Check3.Caption = "Don't prompt for confirmation"

Command1.Caption = "Perform Action"
File1.Pattern = "*.txt"

End Sub


Private Sub Command1_Click()

'set some working variables
Dim cnt As Long
Dim c As Long
Dim fNames() As String
Dim fPath As String
Dim r As Long
Dim target As String

'get the current path from the Dir1 control
fPath = Dir1.Path

'load an array with the file names selected
For cnt = 0 To File1.ListCount - 1

If File1.Selected(cnt) Then

c = c + 1
ReDim Preserve fNames(1 To c)
fNames(c) = fPath & "\" & File1.List(cnt)

End If

Next

'if nothing is yet selected,
'don't go any farther
If c = 0 Then Exit Sub

'if copying or moving to the temp
'folder, get its location
If Option2(1).Value Or _
Option2(2).Value Then target = GetTempDir()

'call ShellDelete
Call ShellDelete(fNames(), target)

'refresh the file list
File1.Refresh

End Sub


Private Sub Dir1_Change()

File1.Path = Dir1.Path

End Sub


道素 2003-08-20
  • 打赏
  • 举报
回复
想调用系统的复制文件并显示进度条用api
SHFileOperation
heroes3player 2003-08-20
  • 打赏
  • 举报
回复
也许应该用多线程吧,通过一个线程进行拷贝,另外一个线程来控制前面这个线程。
我没有用到过Vb的线程,具体怎么做大概需要去找找资料了。
TommyXian 2003-08-20
  • 打赏
  • 举报
回复
帮忙找找,能用就给分!!!
hxy2003 2003-08-20
  • 打赏
  • 举报
回复
有这样一个API啊,,,有进度条的,不过不记得哪一个啦
TommyXian 2003-08-20
  • 打赏
  • 举报
回复
恶心的是,我现在不能控制拷贝:(

我想知道是不是由系统调用可以监视某端口或是磁盘的写入速率。

(没有的话自己如何实现?)
heroes3player 2003-08-20
  • 打赏
  • 举报
回复
要看你用什么方法来拷贝文件了

可以直接调用系统的复制拷贝方法,
也可以用VB里的方法,先打开文件,读取字节,再关闭。

在拷贝前记录一个时间 dt1 = now()
在拷贝后记录一个时间 dt2 = now()
dt2-dt1 就是所花费的时间了。

取得文件大小,除以这个时间,就是你要的速度吧
如何查杀运行状态下的EXE、DLL病毒 一、对于启动进程的EXE病毒的查杀   1、在进程中可以发现的单进程EXE病毒或木马程序,如:svch0st.exe,有些杀毒软件可以发现且可以停掉进程,杀掉病毒;有些杀毒软件会报警提示用户或形成日志,需要用户作进一步判断后,再手工停掉相应进程,杀掉病毒。   2、在进程中可以发现的双进程EXE病毒或木马程序,由于手工方式不能同时停掉两个进程,当我们手工掉其中一个进程后,另一个进程会将该进程重新启动。针对这种情况杀毒软件也无能为力,若两个都是非系统进程,我们可以通过"任务管理器/进程/结束进程树"的方式停掉该进程,杀掉病毒;也可以用工具IceSword(冰刃)中"文件/设置/禁止进线程创建",来停掉其中一个进程,再停掉另一个进程,杀掉病毒。   3、对于像被"熊猫烧香"感染的EXE文件,上述两种手工处理无效,因为无法手工清除受病毒感染的文件中的病毒,这时只能向杀毒软件厂商提供病毒样本,等待杀毒软件升级后再进行处理,或重新安装操作系统。   二、 对于采用进程插入技术,隐藏了进程DLL病毒的查杀   目前的一些高级病毒或木马程序,采用进程插入技术,隐藏了进程,将其DLL动态链接库文件插入现有的系统进程中,常见的插入explorer.exe和winlogon.exe中,目前杀毒软件针对这种动态链接库的病毒查杀,效果都不理想,有时杀毒软件甚至会出现误判,如"赛门铁克误杀系统两个关键动态链接库文件"事件。   对于插入explorer.exe中DLL文件,大部分可以利用工具IceSword中"模块/卸除",将DLL文件卸载,然后手工删除DLL病毒文件。   对于插入winlogon.exe中DLL文件,少数可以利用工具IceSword中"模块/卸除",将DLL文件卸载,然后手工删除DLL病毒文件;大部分是不可以"卸除"的,   对于上述两种不可以"卸除"的情况,需要在安全模式下,手工删除DLL病毒文件。   另外,目前还有些病毒或木马程序有时还会感染U盘,在U盘产生Autorun.inf和相应的EXE文件。 避免系统重装遇病毒攻击的十招 第一招:不要着接入网络 在安装完成Windows后,不要立即把服务器接入网络,因为这时的服务器还没有打上各种补丁,存在各种漏洞, 非常容易感染病毒和被入侵。此时要加上冲击波和震撼波补丁后并重新启动再联入互联网。 第二招:给系统打补丁/安装杀毒软件 冲击波和震荡波病毒的补丁是一定要打上的,如果你安装了Windows XP SP2则不用再另行安装。安装完系统后,一定要安装反病毒软件,同时将其更新到最新版本。 第三招:关闭系统还原 系统还原是Windows ME和Windows XP、Windows 2003中具有的功能,它允许我们将系统恢复到某一时间状态,从而可以避免我们重新安装操作系统。不过,有的人在执行系统还原后,发现除C盘外,其它的D盘、E盘都恢复到先前的状态了,结果里面保存的文件都没有了,造成了严重的损失! 这是由于系统还原默认是针对硬盘上所有分区而言的,这样一旦进行了系统还原操作,那么所有分区的数据都会恢复。因此,我们必须按下Win+Break键,然后单击“系统还原”标签,取消“在所有驱动器上关闭系统还原”选项,然后选中D盘,单击“设置”按钮,在打开的窗口中选中“关闭这个驱动器上的系统还原”选项。依次将其他的盘上的系统还原关闭即可。这样,一旦系统不稳定,可以利用系统还原工具还原C盘上的系统,但同时其他盘上的文件都不会有事。 第四招:给Administrator打上密码 可能有的人使用的是网上下载的万能Ghost版来安装的系统,也可能是使用的是Windows XP无人值守安装光盘安装的系统,利用这些方法安装时极有可能没有让你指定Administrator密码,或者Administrator的密码是默认的123456或干脆为空。这样的密码是相当危险的,因此,在安装完系统后,请右击“我的电脑”,选择“管理”,再选择左侧的“计算机管理(本地)→系统工具→本地用户和组→用户”,选中右侧窗口中的Administrator,右击,选择“设置密码”。 在打开窗口中单击“继续”按钮,即可在打开窗口中为Administrator设置密码。 另外,选择“新用户”,设置好用户名和密码,再双击新建用户,单击“隶属于”标签,将其中所有组(如果有)都选中,单击下方的“删除”按钮。再单击“添加”按钮,然后再在打开窗口中单击“高级”按钮,接着单击“立即查找”按钮,找到PowerUser或User组,单击“确定”两次,将此用户添加PowerUser或User组。注销当前用户,再以新用户登录可以发现系统快很多。 第五招:关闭默认共享 Windows安装后,会创建一些隐藏共享,主要用于管理员远程登录时管理系统时使用,但对于个人用户来说,这个很少用到,也不是很安全。所以,我们有必要要切断这个共享:先在d:下新建一个disshare.bat文件,在其中写上如下语句: @echo off net share C$/del net share d$/del netshare ipc$/del net share admin$ /del 接下来将d:disshare.bat拷贝到C:WINDOWSSystem32GroupPolicyUserScriptsLogon文件夹下。然后按下Win+R,输入gpedit.msc,在打开窗口中依次展开“用户配置→Windows设置→脚本(登录/注销)”文件夹,在右侧窗格中双击“登录”项,在弹出的窗口中,单击“添加”命令,选中C:WINDOWSSystem32GroupPolicyUserScriptsLogon文件夹下的disshare.bat文件。 完成上述设置后,重新启动系统,就能自动切断Windows XP的默认共享通道了,如果你有更多硬盘,请在net share d$/del下自行添加,如net share e$/del、net share f$/del等。 第六招:启用DMA传输模式 启用DMA模式之后,计算机周边设备(主要指硬盘)即可直接与内存交换数据,这样能加快硬盘读写速度,提高数据传输速率:打开“设备管理器”,其中“IDE ATA/ATAPI控制器”下有“主要IDE通道”和“次要IDE通道”,双击之,单击“高级设置”,该对话框会列出目前IDE接口所连接设备的传输模式,单击列表按钮将“传输模式”设置为“DMA(若可用)”。重新启动计算机即可生效。 第七招:启用高级电源管理 有时候安装Windows XP之前会发现没有打开BIOS电源中的高级电源控制,安装Windows XP后,关闭Windows时,电源不会自动断开。这时,很多人选择了重新打开BIOS中的高级电源控制,并重新安装Windows XP。事实上,用不着这么麻烦,只要大家确认已经在BIOS中打开高级电源控制选项,同时选择ACPI Pc,一定不要选错,否则重启后可能无法进入Windows,并重新启动电脑,电脑可能会重新搜索并自动重新安装电脑的硬件,之后就可以使其支持高级电源控制了。 第八招:取消压缩文件夹支持 单击开始→运行,输入“regsvr32 /u zipfldr.dll”回车,出现提示窗口“zipfldr.dll中的Dll UnrgisterServer成功”即可取消Windows XP的压缩文件夹支持。另外,输入regsvr32 shdocvw.dll可以取消“图片和传真”与图片文件的关联。 第九招:取消“磁盘空间不足”通知 当磁盘驱动器的容量少于200MB时Windows XP便会发出“磁盘空间不足”的通知,非常烦人。可以打开“注册表编辑器”,定位到HKEY_CURRENT_USERSoftwareMi crosoftWindowsCurrentVersionPolicies Explorer,在“Explorer”上单击右键,选择右键菜单上的“新建”→“DWORD值”,将这个值命名为“NoLowDiskSpaceChecks”,双击该值将其中的“数值数据”设为“1”。 第十招:启用验证码 安装SP2后,大多数用户发现在访问某些需要填写验证码的地方,都无法显示验证码图片(显示为一个红色小叉),这是一个非常严重的Bug。解决办法为:运行“Regedit”命令打开注册表编辑器,依次定位到“[HKEY_ LOCAL_MACHINESOFTWAREMicrosoftInternet Explorer Security]”,在窗口右边新建一个名为“BlockXBM”的REG_ DWORD值,将其值设置为“0”(十六进制值)。 杀毒软件的常见问题 安装杀毒软件后与其他软件发生冲突怎么办?   1)由于多数杀毒软件和防火墙在默认设置中都是开机后自动运行的,因此当发生软件冲突时先检查是否开启了杀毒软件和防火墙,然后尝试暂时关闭杀毒软件和防火墙的监测功能,再看看问题是否已经解决;   2)到杀毒软件的主页网站看看是否出了相关补丁或升级版本,有则打上补丁或升级到最新版本;   3)如果以上措施还不能解决问题,可以通过E-mail联系作者,寻求解决方法。   不能正常升级怎么办?   1)如果使用的是正版软件,可以先试着完全卸载旧版本,再安装新版本(为安全起见,建议卸载前先进行备份);   2)检查是否安装了多种杀毒软件,卸载其他杀毒软件后再安装;   3)检查输入的序列号是否正确、钥匙盘(A盘)有没有损坏,有问题的请与经销商联系解决;   4)尝试以下操作方法:清空Temp文件夹→关闭打开的杀毒软件→换路径重新安装→把安装光盘中的安装目录拷贝到硬盘上,然后运行目录里的“Setup.exe”。   无法清除病毒怎么办?   1)先升级病毒库再杀毒;   2)用一张干净的系统引导盘启动机器后,在DOS状态下进行杀毒;   3)备份染毒文件并隔离,然后把病毒样本寄给作者,得到新病毒库后再杀毒。 电脑中毒后的6招处理方法 现在虽然有众多的杀毒软件和防火墙供大家作为电脑的保护,但新病毒和木马,加上黑客人工的入侵方式,电脑中毒的情况还是很普遍。尤其是上网的用户,一不留意就会中招。如何防止中毒的技巧文章,大家已经看得很多了。那么万一中毒了,该如何处理呢?下面就谈谈中毒后的一些紧处理措施:   一、正在上网的用户,发现异常应首先马上断开连接   如果你发现IE经常询问你是否运行某些ACTIVEX控件,或是生成莫明其妙的文件、询问调试脚本什么的,一定要警惕了,你可能已经中招了。典型的上网被入侵有两种情况:   1、是浏览某些带恶意代码的网页时候被修改了浏览器的默认主页或是标题,这算是轻的;还有就是遇到可以格式化硬盘或是令你的windows不断打开窗口,直到耗尽资源死机??这种情况恶劣得多,你未保存和已经放在硬盘上的数据都可能会受到部分或全部的损失。   2、是黑客的潜在的木马发作,或是蠕虫类病毒发作,让你的机器不断地向外界发送你的隐私、或是利用你的名义和邮件地址发送垃圾,进一步传播病毒;还有就是黑客的手工入侵,窥探你的隐私或是删除破坏你的文件。   处理办法:马上断开连接,这样能将自己的损失降低的同时,也避免了病毒向更多的在线电脑传播。请先不要马上重新启动系统或是关机,进一步的处理措施请参看后文。   二、中毒后,应马上备份转移文档和邮件等   中毒后运行杀毒软件清除是不在话下的了,但为了防止杀毒软件误杀或是删掉你还处理完的文档和重要的邮件,你应该首先将它们转移备份到其他储存媒体上。有些长文件名的文件和未处理的邮件要求在windows下备份,所以第一点这里笔者建议您先不要退出windows,因为病毒一旦发作,可能就不能进入windows了。   不管这些文件是否带毒了,你都应该备份,用标签纸标记为待查即可。因为有些病毒是专门针对某个杀毒软件设计的,一运行就会破坏其他的文件,所以先备份是以防万一的措施。等你清除完硬盘内的病毒后,再来慢慢分析处理这些额外备份的文件较为妥善。   三、需要在windows下先运行一下杀CIH的软件(即使是带毒环境)   如果是发现了CIH病毒的,要注意不能完全按平时报刊和手册建议的措施,先关机、冷启动用系统盘来引导再杀毒,应在带毒的环境下也运行一次专杀CIH的软件。这样做,杀毒软件可能会报告某些文件在受读写保护无法清理,但带毒运行的实际目的不在于完全清除病毒,而是在于把CIH下次开机时候的破坏减到最低,以防它再次开机破坏主板的BIOS硬件,那么就会黑屏,让你的下一步杀毒无法进行。   四、需要干净的DOS启动盘和DOS下面的杀毒软件   到现在,就应该按很多杀毒软件的标准手册去按步就班地做,即关机后冷启动,用一张干净的DOS启动盘引导是不能少的了;另外由于中毒后可能windows已经被破坏了部分关键文件,会频繁地非法操作,所以windows下的杀毒软件可能会无法运行。所以请你也准备一个DOS下面的杀毒软件来以防万一。   即使能在windows下运行杀毒软件的,也请用两种以上工具交叉清理。在多数情况下windows可能要重装,因为病毒会破坏掉一部分文件让系统变慢或出现频繁的非法操作。比如即使杀了CIH,微软的OUTLOOK邮件程序也是反应较慢的。建议不要对某种杀毒软件带偏见,由于开发时候侧重点不同、使用的杀毒引擎不同,各种杀毒软件都是有自己的长处和短处的,交叉使用效果较理想。   五、如果有GHOST和分区表、引导区的备份,用之来恢复一次最保险   如果你在平时作了windows的GHOST备份,用之来镜像一次,得到的操作系统是最保险的。这样连潜在的未杀光的木马程序也顺便清理了,当然,这要求你的GHOST备份是绝对可靠的,呵呵,要是作GHOST的时候把木马也“备份”了就.....   六、再次恢复系统后,更改你的网络相关密码   包括登录网络的用户名、密码,邮箱的密码和QQ的等等,防止黑客已经在上次入侵过程中知道了你的密码。另外因为很多蠕虫病毒发作会向外随机发送你的信息,所以适当的更改是必要的。

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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