如何删除正在使用中的文件

ytcgj 2008-04-02 08:56:08
比如IE浏览器的临时文件夹Local Settings\Temporary Internet Files里有个index.dat就怎么也删除不掉,怎么才能删除他呢,要用VB代码。
...全文
2811 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
icansaymyabc 2008-05-13
  • 打赏
  • 举报
回复
给你支个高招:
建立虚拟盘,把 IE 临时文件夹设在虚拟盘上。你一重启就什么都没了,还用得着你去删?
meiZiNick 2008-05-01
  • 打赏
  • 举报
回复
接分先!
ymk 2008-04-30
  • 打赏
  • 举报
回复
必须先停止运行,才能删除,否则操作系统不允许直接删除的。
startbin 2008-04-26
  • 打赏
  • 举报
回复
看的我要喷饭,强制删除在ring3下比较难实现,需要进ring0用驱动实现,360的文件粉碎就是这种原理,虽然文件被删,但不会影响正在运行的程序
ZOU_SEAFARER 2008-04-23
  • 打赏
  • 举报
回复
25楼方法不行,
iamxiang 2008-04-23
  • 打赏
  • 举报
回复
还有一种:
Private Declare Function MoveFileEx Lib "kernel32" Alias "MoveFileExA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal dwFlags As Long) As Long
Private Const MOVEFILE_DELAY_UNTIL_REBOOT = &H4
Private Const MOVEFILE_REPLACE_EXISTING = &H1
'api声明

MoveFileEx Textpath.Text, vbNullString, MOVEFILE_DELAY_UNTIL_REBOOT '把原来文件kill

这个函数可以重启删除文件,在这里就是删除textpath.text中所写的文件,很多工具不是可以重启删除文件吗?就是利用这个函数的
iamxiang 2008-04-23
  • 打赏
  • 举报
回复
VB强行删除目录或(VB强行删除文件)模块源码

Public Enum FO_Operation
FO_MOVE = 1
FO_COPY = 2
FO_DELETE = 3
FO_RENAME = 4
End Enum

Public Enum FOFlags
FOF_MULTIDESTFILES = &H1 'Destination specifies multiple files
FOF_SILENT = &H4 'Don't display progress dialog
FOF_RENAMEONCOLLISION = &H8 'Rename if destination already exists
FOF_NOCONFIRMATION = &H10 'Don't prompt user
FOF_WANTMAPPINGHANDLE = &H20 'Fill in hNameMappings member
FOF_ALLOWUNDO = &H40 'Store undo information if possible
FOF_FILESONLY = &H80 'On *.*, don't copy directories
FOF_SIMPLEPROGRESS = &H100 'Don't show name of each file
FOF_NOCONFIRMMKDIR = &H200 'Don't confirm making any needed dirs
End Enum

Public Type SHFILEOPSTRUCT
hwnd As Long
wFunc As Long
pFrom As String
pTo As String
fFlags As Integer
fAnyOperationsAborted As Long
hNameMappings As Long
lpszProgressTitle As Long ' only used if FOF_SIMPLEPROGRESS
End Type

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

Private op As SHFILEOPSTRUCT

Public Sub DeleteFolder(sDeleteFolder As String, Optional Interface As Boolean = False)

SetAttr sDeleteFolder, vbNormal
With op
.wFunc = FO_DELETE
.pFrom = sDeleteFolder
.fFlags = IIf(Interface = False, FOF_NOCONFIRMATION, FOF_NOCONFIRMATION And FOF_SILENT)
End With
SHFileOperation op

End Sub

'假如你要删除的目录是:"c:\temp",无论它有多少子目录,有多少文件,一样被删除,前提是目录已经存在。
sailorsb 2008-04-22
  • 打赏
  • 举报
回复
如果得到文件句柄,并脱钩的话,有可能能删掉。
IamDeane 2008-04-21
  • 打赏
  • 举报
回复
目前还没有见到过这样的软件Tracks Eraser Pro也是不可以的,不信自己可以试试5楼的代码我测试了一下,对index.dat没有任何作用,21楼的办法如果行得通,值得试试,你可以再改回来
shakoe 2008-04-21
  • 打赏
  • 举报
回复
使用api

1.找出打开这个文件的进程
2.kill这个进程
3.删除这个文件

嘿嘿随便写写
犀山居士 2008-04-19
  • 打赏
  • 举报
回复
变通的文件当然可以删除,但是正在播放的MP3文件不可以删除,下去运行的EXE不可以删除,正被其它EXE调用的DLL文件不可以删除,除非你使用更底层的技术解除文件的句柄!
通过修改临时文件路径来删除原有的index.dat,但新的文件夹下的你还是不能删除,不过这样可以起到清除原来的记录!
犀山居士 2008-04-19
  • 打赏
  • 举报
回复
17楼的到底有何高招?
lyserver 2008-04-12
  • 打赏
  • 举报
回复
有两种思路可以实现:
一是改变IE的临时文件夹,这样原来路径下的index.dat就可以删除了,不过原路径下的你还是删除不掉.
二是改变当前用户,这样IE的临时文件夹也会发生改变,则原来的可以删除了.
至于要删除正在使用中的文件,涉及的问题比较复杂,我简单讲一下,一般被使用的文件具有三种属性,可读,可写,读复制,而由于大部分文件是以内存影射的形式读入内存的,所以不能直接删除.除非通过枚举找到进程中相应的文件句柄,然后替换该进程所使用的某个API,在替换后的API中增加关闭文件句柄的代码,之后就可以删除了,不过会造成原进程不稳定甚至D当掉.
注:由于文件句柄属于私有,故不能直接使用线程注入来调用自己的关闭代码.
舉杯邀明月 2008-04-12
  • 打赏
  • 举报
回复
楼上说的行不通吧!你自己试过没有?

我刚才看了你的回复,试了一下:
把“记事本”Notepad.exe复制到E:\
运行E:\下的Notepad.exe
然后在命令行下执行:del notepad.exe
提示:拒绝访问。
在E:\下弄个批处理文件d.bat ,内容是:del notepad.exe

执行:d.bat
仍然是:拒绝访问。

二两就醉 2008-04-12
  • 打赏
  • 举报
回复
任何一个正在运行的文件都可以删除的(包括exe文件)。
二两就醉 2008-04-12
  • 打赏
  • 举报
回复
我知道,以前见过一个例子的:



在VB中写文件:

写成Windows脚本(*.bat)文件,然后在程序中直接调用。

脚本中删除部分为:
del ...(文件路径)


即可。
ytcgj 2008-04-07
  • 打赏
  • 举报
回复
有VB源码吗
nicon 2008-04-06
  • 打赏
  • 举报
回复
Unlocker 多国语言版
当你重命名或删除一个文件/文件夹时,Windows 弹出对话框提示你“无法删除 xxx:它正在被其它用户/程序使用!”,怎么办? 使用 Unlocker ,你就可以轻松、方便、有效地解决这个虽小但很烦人的问题!同类的工具中,综合易用性、功能强度,此款是目前最好的!
http://www.crsky.com/soft/5890.html
舉杯邀明月 2008-04-04
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 ytcgj 的回复:]
如果文件比较大的话,速度会比较慢的,有没有直接把它删除的办法
[/Quote]

那个文件能有多大?一般就几十K到几百K吧。

再说,那个是 Windows 系统在使用的文件,它一启动,就要把它打开,你怎么能删除。你有办法让系统把它关闭不差不多。


vbman2003 2008-04-03
  • 打赏
  • 举报
回复
帮顶学习
加载更多回复(11)

7,787

社区成员

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

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