当前位置: 首页 > 图文教程 > 网络编程 > ASP > 使用FSO修改文件夹的名称实现文件转移防盗链

ASP
asp生成三维饼图的函数
ASP下的简洁的多重查询的方法与函数 真不错
发一个ASP的ADODB类代码
A利用ASP小偷和Google实现在线翻译功能的代码
ASP类型网站结合动网论坛会员的方法
Asp下实现多表单域无组件文件上传的实例
asp制作中常用到的函数库集合
易心asp分页类 v1.0
asp中xmlhttp组件发包
检测是否为数字类型的asp代码
可以获得文件的文件名的asp函数
用asp实现访问远程计算机上MDB access数据库文件的方法
用ASP实现写IIS日志的代码
asp在IE浏览器中下载服务端上的各类文件的实现方法
asp汉字中文图片验证码的实现代码
asp WAP获取手机终端信息的一段代码
asp取得数组中的最大值的方法
用asp实现的截取指定格式字符串的代码
asp jmail发邮件 详细解析
ASP编程中连接数据库和数据库操作的常用代码

ASP 中的 使用FSO修改文件夹的名称实现文件转移防盗链


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 128 ::
收藏到网摘: n/a

那天突然的一个灵感,是针对防盗链的
正常上传的文件,若被人盗链则增加了自己服务器的负担,上次164.cc就因此被挂
然后想想对策,目前各类防盗链程序也不少,不过使用也并不简单,还有就是不能免费……
所以,只有自己先想办法。那么,现在看看标题,再想想防盗链,或许就有些眉目了
我可以不定时的修改上传文件所在的文件夹名称,而本站程序是动态获得文件夹名称,这样原先盗用本站文件的站点会因路径的错误而找不到文件,从而也就实现了防盗链。
那么,如何使用FSO修改文件夹的名称呢?
一个简单的函数:
复制代码 代码如下:

<%
Function fldrename(nowfld,newfld)
nowfld=server.mappath(nowfld)
newfld=server.mappath(newfld)
Set fso = CreateObject("Scripting.FileSystemObject")
if not fso.FolderExists(nowfld) then
response.write("需要修改的文件夹路径不正确或文件夹名称输入错误")
else
fso.CopyFolder nowfld,newfld
fso.DeleteFolder(nowfld)
end if
set fso=nothing
End Function
%>

总的来说就是拷贝当前文件夹的内容到新的文件夹中,然后再删除该文件夹内容,从而间接达到文件夹改名的目的。
这是一个偏执狂问题,因为修改文件夹名称,尤其是要修改名称的该文件夹内容是G量时,这个等待的时间相对FTP远程修改名称就有点不划算了。
有人说FSO可不可以直接修改文件夹名称呢?吾莫之。
应用该函数
<%call fldrename("ex01","ex02")%>
基本意思即将与程序执行文件在同一目录下的 ex01 文件夹名称修改为 ex02
下面是我在本地的测试情况通报:
1,本程序不消耗程序执行时间
2,执行1G文件夹间接改名时间需要50秒左右,其实也就是服务器端的文件复制转移时间
3,CPU消耗不算太高,30%左右
4,若在改名中间突然死机或掉电,则发生两种情况:
a,新文件夹被建立初期(新文件夹并未建好),下次执行程序,会发生 错误类型:Microsoft VBScript 运行时错误 (0x800A003A)文件已存在,此时只能FTP删除新文件夹再执行(尝试使用FSO删除新文件夹并未凑效)。
b,已经复制了部分文件,下次执行程序,自动覆盖已复制的文件夹内容,原文件夹内容依然存在。只有在复制完毕后,才会将原文件夹及其文件删除。
5,同时需要注意新文件夹的名称,避免和已有文件夹名称重名,当然也可用程序判断
复制代码 代码如下:

<%
Function fldrename(nowfld,newfld)
nowfld=server.mappath(nowfld)
newfld=server.mappath(newfld)
Set fso = CreateObject("Scripting.FileSystemObject")
if not fso.FolderExists(nowfld) then
response.write("需要修改的文件夹路径不正确或文件夹名称输入错误")
else
if fso.FolderExists(newfld) then
response.write("您命名的新文件夹名称已经存在")
else
fso.CopyFolder nowfld,newfld
fso.DeleteFolder(nowfld)
end if
end if
set fso=nothing
End Function
%>

6,若在修改文件夹名称的同时,文件夹内有数据库相关操作、音乐文件正在被播放,则显示为Microsoft VBScript 运行时错误 (0x800A0046)没有权限,主要即是删除原有文件夹出现的问题(音乐文件已被删除、但文件夹未能被删除)。只有FTP登录处理了。若本文件夹为全图片文件则可以运行成功。