asp删除无效文件,我的代码错在哪了?请大侠帮忙

samsunok 2009-10-27 06:23:39
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<!--#include file="conn.asp"-->

<%

'文件删除函数
function deletefile(filename)
if filename<>"" then
set fs1=server.CreateObject("scripting.filesystemobject")
if fs1.FileExists(filename) then
fs1.DeleteFile filename
end if
set fs1=nothing
end if
end function




function searchfile(fname)
'查找sys_about表
sql1="SELECT body from sys_about "
set rs1=server.createobject("adodb.recordset")
rs1.open sql1,conn,1,1
if not rs1.eof then
do while not rs1.eof

if instr(rs1("body"),fname)>0 then
return true
exit do
exit function
end if

rs1.movenext
loop
end if
rs1.close
set rs1=nothing

'查找sys_news表
sql2="SELECT body,picurl from sys_news "
set rs2=server.createobject("adodb.recordset")
rs2.open sql2,conn,1,1
if not rs2.eof then
do while not rs2.eof

if instr(rs2("body"),fname)>0 then
return true
exit do
exit function
end if
if instr(rs2("picurl"),fname)>0 then
return true
exit do
exit function
end if
rs2.movenext
loop

end if
rs2.close
set rs2=nothing

end function


function bianli(path)
dim fso 'fso对象
dim objFolder '文件夹对象
dim objFiles '文件集合
dim objFile '文件对象
set fso=Server.CreateObject("Scripting.FileSystemObject")

on error resume next
set objFolder=fso.GetFolder(path)'创建文件夹对象

set objFiles=objFolder.Files
for each objFile in objFiles

if searchfile(objFile.name)=false then
Response.Write (Server.MapPath("\UploadFile\"+ objFile.name)&"<br>")
deletefile(Server.MapPath("\UploadFile\"+ objFile.name))
end if

next

set objFolder=nothing
set objSubFolders=nothing
set fso=nothing
end function
%>
<%
bianli(Server.MapPath("/")+"\UploadFile\") '调用bianli()函数,这里是遍历当前目录下的图片文件
%>
<%conn.close
set conn=nothing
%>


以上的代码是我用来判断上传的图片是否无效或者过期的,但运行发现,不管是否有效,目录下所有的文件都给删除了,一直找不到原因,bianli()函数指定目录,判断目录下的所有文件是否在 数据表中出现,如果出现,就不删除,如果都没有就删除,在线等...
...全文
139 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
samsunok 2009-10-28
  • 打赏
  • 举报
回复
没有达到我的要求,我的uploadfile目录里的图片,可能有很多不同的表里都在使用,如何对所有的表进行过滤检查,只有一个表的相关字段存在图片名称,就不删除,楼上几位提供的代码,还是比较单一,不同综合检测,再作删除,关键的部分在searchfile()函数里,希望哪位高人能在我的代码上作修改,问题应该是出在searchfile()上了,请指点,小弟不胜感激,楼上几位兄弟,谢谢给我提供帮助。
另外我测试了一下,所有文件不管是否有效,都一律被删除了
samsunok 2009-10-28
  • 打赏
  • 举报
回复
按照 gingerkang 兄的建议,我修改了一下searchfile()返回值的方法,采用searchfile=true的方法,问题得到圆满解决,再次感谢,积分奉上!
samsunok 2009-10-28
  • 打赏
  • 举报
回复
谢谢楼上的,我测试一下,看看结果再说
gingerkang 2009-10-28
  • 打赏
  • 举报
回复
去掉你conn.asp中的on error resume next
我观察到 searchfile 这个函数是不能正常运行的,有语法错误
if searchfile(objFile.name)=false then这行是不能正常运行的,on error resume next导致接着向下执行。
vbs中的function返回值不是用return,需要用赋值语句的
aemyang1987 2009-10-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 gdxinge 的回复:]
我给你我的!
很简单的!

HTML code<%Dim rs,sql
sql="select * from topic where pic <> ''"set rs= conn.execute(sql)Dim path,fso,dir,file
path="upload"
path= server.mapPath(path)Set fso=server.createObject("scripting.FileSystemObject")Set dir=fso.getFolder(path)ForEach file In dir.files
response.write""& file.name&""
rs.Filter="pic='"& file.name&"'"If rs.eofThen
file.deleteTrue
response.write"===========删除=========<br>"Else
response.write"保留 <br>"EndIfNext%>


按你要的改一下代码,例如PIC,觉得好使,记得给分吧!
我一直在用这个的。
[/Quote]
gdxinge 2009-10-27
  • 打赏
  • 举报
回复
我给你我的!
很简单的!


<%
Dim rs,sql
sql = "select * from topic where pic <> ''"
set rs = conn.execute(sql)

Dim path,fso,dir,file
path = "upload"
path = server.mapPath(path)
Set fso=server.createObject("scripting.FileSystemObject")
Set dir=fso.getFolder(path)
For Each file In dir.files
response.write "" & file.name & " "
rs.Filter = "pic='" & file.name & "'"
If rs.eof Then
file.delete True
response.write "===========删除=========<br>"
Else
response.write "保留 <br>"
End If
Next
%>



按你要的改一下代码,例如PIC,觉得好使,记得给分吧!
我一直在用这个的。
haby007 2009-10-27
  • 打赏
  • 举报
回复
在"if searchfile(objFile.name)=false then"前,输出objFile.name,检查一下,在数据库中有没有这个文件名.

28,406

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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