一段小代码

<?php

echo "<pre>";

//定义想要删除视频的目录
$path = str_replace(‘\\‘, ‘/‘, ‘F:\program\utorrent2.02\downloads‘);

//更改工作路径
chdir($path);

/**function name:del;
 *@param path, delete root directory;
 *@param depth, (递归深度)
 */
function del($path,$depth = 0){
    //打开目录,获得文件句柄
    $dir_handle = opendir($path);
    //开始遍历
    while (false !== $file = readdir($dir_handle)) {
        //忽略‘.’跟‘..’
        if ($file == ‘.‘ || $file == ‘..‘) {
            continue;
        }
        //判断当前文件是否为一个目录,是则递归
        if (is_dir($path.‘/‘.$file)) {

            del($path.‘/‘.$file,$depth + 1);

        }else{
            //不是一个文件则判断是否为视频
            if (strstr($file,‘.itcast‘) || strstr($file,‘.avi‘) || strstr($file,‘.mp4‘)) {
            //转换绝对路径字符编码(不含文件名)
                @$path = iconv(‘utf-8‘,‘gbk‘,$path);
            //拼凑出文件完整的绝对路径
                $video = $path.‘/‘.$file;
            //删除
                @unlink($video);

            }
        }
        //判断是否为视频文件夹
        if($file == ‘video‘ || $file == ‘vedio‘){
            //是则删除
            @rmdir($path.‘/‘.$file);
        }
        //输出文件名
        echo str_repeat(‘-‘, $depth * 5),$file,"<br />";
    }
}

//调用函数
del($path);

  前两天看着F盘快要爆盘了,就想着把它清理一下,把传智的视频都删掉,忽然想起来我学过的递归遍历目录,还有删除文件和文件夹,那么我也可以试一下递归删除视频啊~

  好,想到就马上行动,我首先把递归遍历目录的函数写了出来,然后因为怕发生一些不可预料的错误,就另外写一个小脚本尝试单独的删除一个视频,但由于视频名称是中文的,不能删,我到网上查资料,发现需要用到一个编码转换函数iconv(),然后就成功了。之后我在递归函数里面删除,发现系统分别爆了两个错误,说我iconv()和unlink()都使用不正确。我调试了好多次都不行。到了今天晚上,我询问了辅导员,原来出错的原因是我先把文件的路径先拼凑好再去转换编码,但由于目录(utf-8)和中文文件名(gbk)使用的编码不一样,所以iconv()转换不成功。最后的解决方案就是先把目录转换为gbk,再和中文文件名拼凑一起,就可以了。

  然后我想起了一句话:伟大的程序员都懒惰。

时间: 2024-11-03 03:47:06

一段小代码的相关文章

一段小代码说明@property装饰器的用法

#coding:utf-8 """ 一段小代码说明@property装饰器的用法.__name是私有变量 外部不能通过foo.__name访问,但可以通过foo._Foo__name访问. 如果想通过点运算符设置和访问实例属性怎么办,@property派上用途了, 先将一个方法头上加上@property,这个方法就变成实例属性了,再加上这个@get_name.setter 装饰器(@属性名.setter)就可以通过赋值来设置属性. python北京周末培训班 https://

用新学的知识 写了一段小代码

use myschoolgoif exists(select*from sysobjects where name='bank') drop table bank go create table bank ( customername char(10), currentmoney money ) go alter table bank add constraint ck_currentmoney check(currentmoney>=0) go insert into bank(custome

分享《自然语言处理理论与实战》PDF及代码+唐聃+《深入浅出Python机器学习》PDF及代码+段小手+《深度学习实践:计算机视觉》PDF+缪鹏+《最优化理论与算法第2版》高清PDF+习题解答PDF+《推荐系统与深度学习》PDF及代码学习

<自然语言处理理论与实战>高清PDF,362页,带书签目录,文字可以复制:配套源代码.唐聃等著. <大数据智能互联网时代的机器学习和自然语言处理技术>PDF,293页,带书签目录,文字可以复制,彩色配图.刘知远等著.  下载: https://pan.baidu.com/s/1waP6C086-32_Lv0Du3BbNw 提取码: 1ctr <自然语言处理理论与实战>讲述自然语言处理相关学科知识和理论基础,并介绍使用这些知识的应用和工具,以及如何在实际环境中使用它们.由

《深入浅出Python机器学习(段小手)》PDF代码+《推荐系统与深度学习》PDF及代码+《自然语言处理理论与实战(唐聃)》PDF代码源程序

<深入浅出Python机器学习>PDF,280页,带书签目录,文字可以复制:配套源代码. 作者:段小手 下载: https://pan.baidu.com/s/1XUs-94n0qKR1F9rS8KNLHw 提取码: dv74 <深入浅出Python机器学习>内容涵盖了有监督学习.无监督学习.模型优化.自然语言处理等机器学习领域所必须掌握的知识,从内容结构上非常注重知识的实用性和可操作性. <深入浅出Python机器学习>采用由浅入深.循序渐进的讲授方式,完全遵循和尊重

段小手《深入浅出Python机器学习》PDF+代码+《Python机器学习基础教程》高清中英文PDF代码+张亮

机器学习正在迅速改变我们的世界.我们几乎每天都会读到机器学习如何改变日常的生活.如果你在淘宝或者京东这样的电子商务网站购买商品,或者在爱奇艺或是腾讯视频这样的视频网站观看节目,甚至只是进行一次百度搜索,就已经触碰到了机器学习的应用.使用这些服务的用户会产生数据,这些数据会被收集,在进行预处理之后用来训练模型,而模型会通过这些数据来提供更好的用户体验. 此外,目前还有很多使用机器学习技术的产品或服务即将在我们的生活当中普及,如能够解放双手的无人驾驶汽车.聪明伶俐的智能家居产品.善解人意的导购机器人

iOS开发中一些有用的小代码

1.判断邮箱格式是否正确的代码: //利用正则表达式验证 -(BOOL)isValidateEmail:(NSString *)email { NSString *emailRegex = @"[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"; NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES%@&qu

BSS段、数据段、代码段、堆与栈

BSS段:BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域. BSS是英文Block Started by Symbol的简称.BSS段属于静态内存分配. 数据段:数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域. 数据段属于静态内存分配. 代码段:代码段(code segment/text segment)通常是指用来存放程序执行代码的一块内存区 域.这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读

【processing】小代码

今天无意间发现的processing 很有兴趣 实现很简洁 void setup(){ } void draw(){ background(255); if(mouseX < width/2 && mouseY > height/2) { fill(0); rect(0,height/2,width/2,height/2); } } 这个小小的代码可以实现 当鼠标位于画布左下方时显示一个黑色的框 -----------------------------------------

Supermap iClient 空间查询关联外表表查询多表字段示例代码

原创文章,转载请注明出处!http://blog.csdn.net/songhfu 空间查询关联属性表,并查询空间表和关联表字段示例代码如下: /* * 关联测试成功代码 * */ var joinItem=new SuperMap.REST.JoinItem({ foreignTableName: "V_ENABLEVIEW_LAND", joinFilter: "BBS_PARCEL.CADASTRALNO = V_ENABLEVIEW_LAND.CADASTRALNO