在這個和諧泛濫的年代,想下載一部電影是如此的不容易,於是我就養成了收藏電影的習慣,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