当前位置:编程学习 > php >>

技术改变生活——电影目录核对工具(php)

 

 

 

在这个和谐泛滥的年代,想下载一部电影是如此的不容易,于是我就养成了收藏电影的习惯,2个1T的硬盘收藏了近600部片子,于是很多同事朋友知道后,纷纷向我借硬盘拷电影,于是问题也就来了……

  因为没有硬盘锁,所以我无法控制他们对硬盘是否“动手脚”,比如手误造成的剪切或者误删。虽然我有专门一个记录电影目录的txt文件,如下

  

 

但要一个一个核对过去,不仅浪费时间,而且会造成疲劳导致漏看。既然如此,何不用自己的专业技能来实现我的需求呢,说干就干吧。

 

  首先我要把电影目录从txt文件里读取出来并存为php数组

$fp = fopen('D:\movieList.txt','r');

for($i=0; $i<562; $i++){

    $arr[] = trim(substr(fgets($fp),4));

}

fclose($fp);

  其中562是txt文件行数,因为一部电影我就存放一行。因为存放目录里头4个字符是影片清晰度类型,有DVD、BD和MKV三个,所以我用substr(fgets($fp),4)去掉头4个字符,然后用trim去掉首尾的空格,这样最终存放到数组里的片名就不包含任何其他字符了。

  然后要做的就是读取移动硬盘下的电影目录,这里我找的是一段网上读取文件夹下文件名的function

function myreaddir($dir){

    $handle = opendir($dir);

    $i = 0;

    while($file=readdir($handle)){

        if(($file != ". ")&&($file != ".. ")){

            $list[$i] = $file;

            $i = $i+1;

        }

    }

    closedir($handle);

    return $list;

}

$movie = myreaddir("I:\movies");

  这个方法有一个缺陷,就是不能读取子文件下的文件,不过对于我来说已经足够了,大家有兴趣可以在这基础上扩展下去。

  然后就是核对的过程

foreach($arr as $v){

    $f = false;

    foreach($movie as $vv){

        if(strstr($vv,$v)!=""){

            $f = true;

        }

    }

    if(!$f){

        echo $v."<br>";

    }

}

  核对的核心方法就是判断字符串A里是否包含字符串B,也就是电影文件名里是否包含电影目录里的片名,如果不包含,则输出。

  测试后正确率基本有80%,但有一个bug,比如我的电影目录里有部电影叫“电锯”,但是我文件夹里没有“电锯1024*768.rmvb”,而有部叫“电锯惊魂1024*768.rmvb”的,这样程序是判断通过的。

  唯一的解决办法就是在记录电影目录的时候,就把完整的文件名记录下来,不要只记录“电锯”,而应该记录“电锯1024*768”,或者干脆把文件格式也记录下来,这样在核对的时候,可以直接进行字符串比较。

  如果有更好的解决办法,欢迎告诉我。

 

原文地址:http://www.cnblogs.com/hooray/archive/2011/10/30/2228990.html

补充:Web开发 , php ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,