使用VB复制正被打开的文件

我现在想复制一个文件,是ACCESS数据库,mdb格式的,但是这个数据库一整天都是被打开的,我想复制怎么也不行。求一段可以复制的VB代码。最好是出现系统自带的进度框。完美... 我现在想复制一个文件,是ACCESS数据库,mdb格式的,但是这个数据库一整天都是被打开的,我想复制怎么也不行。
求一段可以复制的VB代码。最好是出现系统自带的进度框。完美解决再加100分!
Private Sub Command1_Click()
Dim strDeskPath As String
Set WshShell = CreateObject("WScript.Shell")
FileCopy "E:\DB\ABC.mdb", "C:\Documents and Settings\tgfci\桌面\cr.mdb"
MsgBox "ok!"
End Sub
这是我原先写的代码,请指正。
------------------------------------
08/01追加20分,为新问题
展开
 我来答
icbyboy
2011-08-01 · 超过18用户采纳过TA的回答
知道答主
回答量:38
采纳率:0%
帮助的人:42.9万
展开全部
lz是在想操作以独占方式打开的文件,方法有,都很麻烦
1、寻找打开文件的句柄
如果文件由某个进程打开,那么这个进程就拥有了它的句柄。在我第二篇关于API拦截的文章里我讲解了如何搜索需要的句柄并用它打开进程,要访问已打开的文件,我们也可以使用这种方法。我们需要使用ZwQuerySystemInformation函数来枚举句柄,将每一个句柄都用DuplicateHandle进行复制,确定句柄属于那个文件(ZwQueryInformationFile),如果是要找的文件,就将句柄拷贝。
对于文件的拷贝剩下的工作只是找到所需句柄后用ReadFile读取它。
这个方法只适用于确定文件被那个进程占用。
2、修改句柄访问权限
所有被占用的文件通常都可以用读属性(FILE_READ_ATTRIBUTES)打开,这样就可以读取文件的属性,取得它的大小,枚举NTSF
stream,但遗憾的是,ReadFile就不能成功调用了。打开文件时各种访问属性的区别在哪里呢?显然,打开文件时,系统会记录访问属性,之后会用这个属性与请求的访问作比较。如果找到了系统保存这个属性的位置并修该掉它,那就不只可以读取,甚至可以写入任何已打开的文件。
在用户这一级别上我们并不是直接与文件打交道,而是通过它的句柄(这个句柄指向FileObject),而函数ReadFile/WriteFile调用ObReferenceObjectByHandle,并指明了相应的访问类型。由此我们可以得出结论,访问权限保存在描述句柄的结构体里。实际上,HANDLE_TABLE_ENTRY结构体包含有一个GrantedAccess域,这个域不是别的,就是句柄的访问权限。遗憾的是,Microsoft的程序员们没有提供修改句柄访问权的API,所以我们不得不编写驱动自己来做这项工作。
3、使用直接硬盘访问读取文件
以RAW模式打开volume,并按cluster来读取文件。希望没有被吓到:)
如果直接入手解决这个问题,就需要手动地分析文件系统结构,这样我们就需要编写很多多余的代码,所以我们不会这样去做,而是再一次参考微软伟大的手册MSDN。 "Defragmenting Files "和"Disk Management Control Codes"部分对于我们来说非常有用,那里面有文件系统驱动的控制代码,这些代码可以用在各种磁盘整理程序中。打开MSDN,无疑会发现,使用IOCTL代码FSCTL_GET_RETRIEVAL_POINTERS可以获取文件分配图。也就是说我们只需要借助于这个IOCTL就可以获取被占用文件的cluster list并进行读取。

除以上三种方式,别无他法
百事牛
2024-10-28 广告
作为深圳奥凯丰科技有限公司的工作人员,解除Excel文件打开密码的方法如下:1. 如果您记得密码,打开Excel文件后,通过“文件”-“信息”-“保护工作簿”-“用密码进行加密”的路径,删除弹出的密码框中的密码,点击“确定”即可解除。2. ... 点击进入详情页
本回答由百事牛提供
沙慧月03
2011-08-01 · TA获得超过2157个赞
知道大有可为答主
回答量:2717
采纳率:100%
帮助的人:3679万
展开全部
filecopy函数不能复制正打开的文件,还是试试dos下复制函数吧
Private Sub Command1_Click()
Shell "cmd /c copy E:\DB\ABC.mdb C:\Documents and Settings\tgfci\桌面"
name "C:\Documents and Settings\tgfci\桌面\ABC.mdb" as "C:\Documents and Settings\tgfci\桌面\cr.mdb"

MsgBox "ok!"

End Sub
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
G0398
2011-07-30 · TA获得超过764个赞
知道小有建树答主
回答量:1335
采纳率:0%
帮助的人:896万
展开全部
只有关闭再复制啦,安全模式手动复制
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
轩援夕雨
2011-07-30 · TA获得超过418个赞
知道答主
回答量:46
采纳率:0%
帮助的人:13.5万
展开全部
用360解除占用,再执行复制代码,给分吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zx001z7d53
2011-07-30 · TA获得超过2万个赞
知道大有可为答主
回答量:2.4万
采纳率:52%
帮助的人:5966万
展开全部
先加了分再说,否则门斗没有,本来想回到,看到最后一句恶心了,这里的分能换馒头么?
追问
有本事你就回答,字你都不会打
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式