本日志标题:如何使用FSO修改文件夹的名称        [2006-10-19] Bookmark and Share

那天突然的一个灵感,是针对防盗链的

正常上传的文件,若被人盗链则增加了自己服务器的负担,上次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
%>



读懂本函数内容,建议你阅读 ASP编程入门进阶(十七):FSO组件之文件夹操作
http://www.cnbruce.com/blog/showlog.asp?cat_id=26&log_id=439

总的来说就是拷贝当前文件夹的内容到新的文件夹中,然后再删除该文件夹内容,从而间接达到文件夹改名的目的。

这是一个偏执狂问题,因为修改文件夹名称,尤其是要修改名称的该文件夹内容是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登录处理了。若本文件夹为全图片文件则可以运行成功。

在百度搜索完整的如何使用FSO修改文件夹的名称内容,或者用Google搜索相关的更多内容

By [cnbruce] at 16:00:49 | 评论 [29] | 浏览 [28266] | TrackBack| 返回顶部

About Comments
呀,我发现有些语句我居然还记得呀!哈哈~~~
By [kite] at 2006-10-20 9:15:30
忽忽,我的blog正好有此防盗功能。不定期用FSO更改文件夹名。
By [kuhanzhu] at 2006-10-21 18:16:20
有直接改名的方法啊,不需要用COPY吧?
By [qsylbt] at 2006-10-23 13:57:27
Folder的NAME属性应该可以用于直接改名字吧
By [x_hunter] at 2006-12-28 12:39:39
需要这么复杂么,为什么要复制成新的再来删除旧的?
如下直接即可
fso.MoveFolder server.mappath(nowfld),server.mappath(newfld)

http://www.nalimai.com
By [nalimai] at 2007-1-21 13:22:39
戴老师,我买了您那本《DW8+ASP...从基础到实践》我按照P214的方法,使用"Proveder=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.Mappath("/myblog/db/blogdb.mdb")连接数据库时候一切正常,浏览网页也没问题。

但是使用Proveder=Microsoft.Jet.OLEDB.4.0;DataSource=e:/myblog/db/blogdb.mdb连接的话,数据库能正常连接,测试成功,记录集也能测试通过并顺利创建,但是预览网页时就出现如下错误(只要把记录集删除,网页又能正常浏览):

技术信息(用于支持人员)

错误类型:
Microsoft JET Database Engine (0x80004005)
不能使用 '';文件已在使用中。
/myblog/index.asp, 第 8 行


浏览器类型:
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)

网页:
GET /myblog/index.asp



By [emiss] at 2007-4-13 19:44:47
(接上)其中index.asp部分代码如下:
4 Dim Recordset1
5 Dim Recordset1_numRows
6
7 Set Recordset1 = Server.CreateObject("ADODB.Recordset")
8 Recordset1.ActiveConnection = MM_connect_STRING
9 Recordset1.Source = "SELECT * FROM members"
10 Recordset1.CursorType = 0
11 Recordset1.CursorLocation = 2
12 Recordset1.LockType = 1
13 Recordset1.Open()
按提示,第8行我看不出是什么错误,此外我还注意到,在我的blogdb.mdb同文件夹下自动生成一个blogdb.ldb文件,如果用第一种方法来连接数据库则不会产生这个文件。我google了一堆网页,试了别人说的一些解决方法还是不行,请戴老师帮帮忙看是什么问题,谢谢。
By [emiss] at 2007-4-13 19:47:31
"文件已在使用中。",,调试页面的时候,请把打开着的blogdb.mdb数据库文件关闭
By [cnbruce] at 2007-4-13 20:05:33
怎样才能修改绝对路径的名呀
By [jandr] at 2007-5-29 16:50:38
FSO有moveFolder属性的呀。
By [Juven] at 2007-6-1 23:12:59
这样会不回出错??
By [guochan007a] at 2007-9-13 23:51:26
hi
By [faucets] at 2007-9-15 16:58:38
用得着那么麻烦么?
Folder = fso.getFolder(server.MapPath(folderPath))
Folder.name=editName
这样不就行了....
By [hugh] at 2007-9-28 9:00:55
什么时候我能有你们的水平啊?好难学啊!
By [wang] at 2007-10-7 8:39:38
Microsoft OLE DB Provider for ODBC Drivers (0x80040E21)
ODBC 驱动程序不支持所需的属性。
/H.tao/1/textview.asp, 第 16 行

代码是
Dim rs, sql, id
id = Request("id")
'定义Recordset对象,用于保存信息记录集
sql = "Select * From user where id=' &vid '"
Set rs = Server.CreateObject("ADODB.Recordset")
'显示软件
rs.open sql,conn,1,1
If Not rs.EOF Then
为什么?
By [NOTANGEL] at 2007-11-16 18:01:57
戴老师你好!
我看了你写的书,很不错.但是我按照你说的自己搭建了一个ASP动态网站.在本地测试很成功.没有出现什么问题.但是当我上传到远程服务器的时候.这个数据库文件连接老是出错啊!为什么在本地调试又是正常的啊?请戴老师指导!非常渴望你能够解释一下其中的原因.
By [渴望知道] at 2007-12-7 13:27:34
这是因为远程服务器上面的数据库路径地址和本地的数据库路径是不一样的
要获得数据库在服务器上的路径地址才能在服务器上显示正常
或者直接使用“测试服务器”路径就不会有问题了
By [bruce] at 2007-12-7 14:28:38
戴老师你好,很感谢你的回答!我按照你说的直接使用“测试服务器”路径.在DW中使用测试服务器上的驱动程序.修改完后进行上传.但是还是出现了问题.页面提示错误是:
Microsoft OLE DB Provider for ODBC Drivers 错误 '80004005'

[Microsoft][ODBC Microsoft Access Driver]常见错误 不能打开注册表关键字 'Temporary (volatile) Jet DSN for process 0x10d4 Thread 0x1768 DBC 0x1343cea4 Jet'。
这是怎么回事啊?敬请戴老指导.
By [渴望知道] at 2007-12-8 9:46:44
还以为你是高手呢


也是不学无术

用得着那么烦吗?

asp你会多少?再学学吧

By [梅子雨] at 2007-12-8 9:52:14
回复上楼.本人不是什么ASP高手.我也没说我是高手.我是搞网站前台页面美工设计的.对后台编程不懂.只是自己想亲手用DW搭建个个人网站.因为DW是不用手写代码.由它自动生成.在此只想请教一下戴老师问题.如果这是戴老师意思的话.本人无语.
By [渴望知道] at 2007-12-8 10:36:11
好像是在批评我啊

有问题直接MAIL吧 cnbruce(a)126.com
By [cnbruce] at 2007-12-8 11:19:55
我用dreamweaver MX+access做新闻发布系统,文字发布做好了并且可以正常运行。可是图片发布怎么做啊??
我是这个意思,在主页上留出一个放图片的地方,然后在后台用管理员的帐号密码登陆,然后上传图片,就可以在主页相应位置显示出发布的图片来??我对asp不太熟悉, 就像你的博客一样,图片可以显示在文章的任何位置.请问怎么做!请戴老师教教我用dreamweaver怎么做!~谢谢了啊!能不能够专门写这么一片文章啊,指导一下.再次感谢@!!!!
By [疯狂的求知欲!] at 2008-3-25 18:15:50
老师您好,遇到一个长期困扰我的问题,真不知道到哪里求医,总觉得不好意思在这里求助,因为每个人都很忙,转入正题。关于ASP动态网站实现实现动态更新,而访问的页面地址或者说路径却是静态的,因为这样就好把TITLE个性化,否则就一样的标签。也不知道您的博客是如何实现TITLE个性化的?
By [cnbrucedefans] at 2008-5-1 17:09:02
up
By [ljzxh] at 2008-6-3 23:56:39
ff下"Ctrl+Enter提交"没反应,不知道有没有兼容ff的ff"Ctrl+Enter提交"
:P
By [ljzxh] at 2008-6-4 0:00:53
老师就是老师!厉害!
By [handbags] at 2008-6-22 22:45:20
学习了
http://www.look8.com
By [tony] at 2010-6-9 13:56:55
好文章学习了,方管,镀锌方管http://www.361steel.com
By [361steel] at 2012-12-11 19:11:02


Post a Comment
呢称: 验证码: 
禁止笑脸转换 禁止UBB | 缩放输入框:6 5 | [Ctrl+Enter提交](1000个字符限制)