我正在寻找一种比较2个目录的方法,以查看两者中是否存在文件。我想要做的是删除其中一个目录中的文件(如果两个目录中都存在。
)我可以使用 ASP
或 PHP
。
示例:
/devices/1001
/devices/1002
/devices/1003
/devices/1004
/devices/1005
/disabled/1001
/disabled/1002
/disabled/1003
因为 / disabled / 中存在1001, 1002, 1003
,我想从 / devices / 中删除它们,只留下1004, 1005
的 /装置/
答案 0 :(得分:5)
使用scandir()
获取每个目录中的文件名数组,然后使用array_intersect()
查找给定的任何其他参数中存在的第一个数组的元素。
http://au.php.net/manual/en/function.scandir.php
http://au.php.net/manual/en/function.array-intersect.php
<?php
$devices = scandir('/i/auth/devices/');
$disabled = scandir('/i/auth/disabled/');
foreach(array_intersect($devices, $disabled) as $file) {
if ($file == '.' || $file == '..')
continue;
unlink('/i/auth/devices/'.$file);
}
作为一项功能应用,包括检查目录是否有效:
<?php
function removeDuplicateFiles($removeFrom, $compareTo) {
$removeFromDir = realpath($removeFrom);
if ($removeFromDir === false)
die("Invalid remove from directory: $removeFrom");
$compareToDir = realpath($compareTo);
if ($compareToDir === false)
die("Invalid compare to directory: $compareTo");
$devices = scandir($removeFromDir);
$disabled = scandir($compareToDir);
foreach(array_intersect($devices, $disabled) as $file) {
if ($file == '.' || $file == '..')
continue;
unlink($removeFromDir.DIRECTORY_SEPARATOR.$file);
}
}
removeDuplicateFiles('/i/auth/devices/', '/i/auth/disabled/');
答案 1 :(得分:1)
使用PHP非常容易 - 在本例中我们设置了两个基本目录和文件名...这可能很容易成为foreach()
循环中的数组。然后我们检查两个目录,看它是否确实存在于每个目录中。如果是这样,我们从第一个删除。这可以很容易地修改为从第二个删除。
见下文:
<?php
$filename = 'foo.html';
$dir1 = '/var/www/';
$dir2 = '/var/etc/';
if(file_exists($dir1 . $filename) && file_exists($dir2 . $filename)){
unlink($dir1 . $filename);
}
答案 2 :(得分:1)
if ($handle = opendir('/disabled/')) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
unlink('/devices/' . $file);
}
}
closedir($handle);
}
答案 3 :(得分:0)
在php中,使用它来检查文件是否存在....它将返回true或false ...
file_exists(relative file_path)
答案 4 :(得分:0)
对于设备中的每个文件,使用禁用的路径和设备中的文件名检查是否存在禁用状态。
<%
Set fso = server.createobject("Scripting.FileSystemObject")
Set devices = fso.getfolder(server.mappath("/i/auth/devices/"))
Set disabledpath = server.mappath("/i/auth/disabled/")
For each devicesfile in devices.files
if directory.fileExists(disablepath & devicesfile.name ) Then
Response.Write " YES "
Response.write directoryfile.name & "<br>"
Else
Response.Write " NO "
Response.write directoryfile.name & "<br>"
End if
Next
%>