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

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

正常上传的文件,若被人盗链则增加了自己服务器的负担,上次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登录处理了。若本文件夹为全图片文件则可以运行成功。

时间: 2017-11-20

使用FSO修改文件夹的名称实现文件转移防盗链的相关文章

使用FSO修改文件夹的名称实现文件转移防盗链_应用技巧

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

怎么把一个文件夹里多个文件名相同的文件移动到一个文件夹内并新建文件夹以该文件名命名文件夹名称

问题描述 怎么把一个文件夹里多个文件名相同的文件移动到一个文件夹内并新建文件夹以该文件名命名文件夹名称 怎么把一个文件夹里多个文件名相同的文件移动到一个文件夹内并新建文件夹以该文件名命名文件夹名称 解决方案 第一,你要在什么环境下实现 第二,举个例子,更好的说明你的问题 第三,去找度娘 解决方案二: 刚开始看见你的问题,头有点大,像是要口令,你用什么语言,完成这样事情啊 解决方案三: win里好像不行吧,百度都解决不了 解决方案四: 用Directory.GetFiles遍历文件夹找到文件,用F

android-Android:res/xml文件夹内的xml文件在运行时可以修改吗?

问题描述 Android:res/xml文件夹内的xml文件在运行时可以修改吗? 我想在程序运行时,修改该Xml文件android:requirdDeviveUnlock的值为true. 但是,系统提供的getResources().getXml()方法返回的是XmlResourceParser类型,只能用于解析,没法修改该值. 解决方案 http://stackoverflow.com/questions/7162285/how-to-edit-xml-in-android-and-save

c#-获取文件夹的名称,并分类移动

问题描述 获取文件夹的名称,并分类移动 有几个文件夹名为"1.1,1.2,1.3,2.1,2.2,2.3,....",移动到选择文件夹, 并创建 以"."前面的字为名创建文件夹 "1,2",并把'1.1,1.2,1.3','2.1,2.2,2.3'移入到创建的文件夹 解决方案 在D:测试目录下建立1.1.1.2.1.3.2.1.2.2.2.3等几个文件夹,然后运行我下面的程序. namespace ConsoleApplication1 { cl

源代码管理: 项目中某些文件或文件夹的名称与当前系统 ANSI 代码页不兼容。

问题描述 提示错误:源代码管理:项目中某些文件或文件夹的名称与当前系统ANSI代码页不兼容.在重命名这些文件或文件夹或者在将"区域和语言设置"更改为与当前系统ANSI代码页兼容的代码页之前,无法管理这些文件或文件夹.有人遇到过这种情况吗? 解决方案 解决方案二:哪个版本管理工具?解决方案三:帮帮忙啊谢谢了解决方案四:VSS2005的解决方案五:如何解决啊解决方案六:ANSI格式没有问题,UTF-16.UTF-8有问题,不能正确识别,存储的文件会错乱.微软承认麻烦很大,详细的说明MSDN

右键菜单添加“复制到文件夹”和“移动到文件夹”

Windows的右键菜单可以允许通过修改注册表来实现,其实对文件的复制和移动工作比较频繁,但Windows右键默认没有"复制到文件夹"和"移动到文件夹"选项.下面简单介绍修改注册表为右键添加"复制到文件夹"和"移动到文件夹"选项,其具体操作是: 运行注册表编辑器regedit,打开注册表,找到HKEY_CLASSES_ROOT-AllFilesystemObjectsshellexContextMenuHandlers,在该子

php 生成自动创建文件夹并上传文件的示例代码

 本篇文章主要是对php生成自动创建文件夹并上传文件的示例代码进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助    代码如下: <? session_start(); if($_SESSION['Company']=='') {  //exit(); } ?><?php //上传图片   $uptypes=array('image/jpg','image/jpeg','image/png','image/pjpeg','image/gif','image/bmp','appli

大神帮帮忙-递归一个文件夹下的所有文件以及文件夹,造成内存溢出问题

问题描述 递归一个文件夹下的所有文件以及文件夹,造成内存溢出问题 我需要递归一个文件夹下所有的文件并进行操纵,文件夹下也有文件夹,我用一个list存储递归得到的所有文件可能会造成溢出.我需要当此list为10000时候执行,然后清空list,请问如何实现.代码如下: static void getFiles(String filePath){ File root = new File(filePath); File[] files = root.listFiles(); for(File fil

PHP读取文件夹内有多少个文件

文件夹 PHP读取一个文件夹内有多少个文件的函数.比如有一个Pic文件夹,里面有100张图片,下面的函数可以得到他的总数100<?php$dir = './pic';$handle = opendir($dir);$i = 0;while(false !== $file=(readdir($handle))){    if($file !== '.' || $file != '..')    {        $i++;    }}closedir($handle);echo $i;?>

PHP遍历指定文件夹下的所有文件

PHP遍历指定文件夹下的所有文件,如下代码: <?php   session_start();  if($Submit=="提交"){   $shili=$file_dir;  }  ?>  <html>  <head>  <meta http-equiv="Content-Type" content="text/html; charset=gb2312">  <title>遍历指定目录