Проверьте, существует ли файл в 2 каталогах, используя ASP или PHP - PullRequest
0 голосов
/ 15 февраля 2011

Я ищу способ сравнить 2 каталога, чтобы увидеть, существует ли файл в обоих.Я хочу удалить файл в 1 из каталогов, если он существует в обоих.

Я могу использовать ASP или PHP.

Пример:

/devices/1001
/devices/1002
/devices/1003
/devices/1004
/devices/1005

/disabled/1001
/disabled/1002
/disabled/1003

Так как 1001, 1002, 1003 существует в / отключен / , я хочу удалить их из / devices / иОстается только с 1004, 1005 в / devices / .

Ответы [ 5 ]

5 голосов
/ 15 февраля 2011

Использование 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 голос
/ 15 февраля 2011
if ($handle = opendir('/disabled/')) {
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != "..") {
            unlink('/devices/' . $file);            
        }
    }
    closedir($handle);
}
1 голос
/ 15 февраля 2011

С PHP очень легко - в этом примере мы устанавливаем две базовые директории и имя файла ... это может быть просто массив в цикле foreach().Затем мы проверяем оба каталога, чтобы увидеть, действительно ли он находится в каждом из них.Если это так, мы удаляем с первого раза.Это можно легко изменить, чтобы удалить со второго.

См. Ниже:

<?php 

$filename = 'foo.html';
$dir1 = '/var/www/';
$dir2 = '/var/etc/';
if(file_exists($dir1 . $filename) && file_exists($dir2 . $filename)){
  unlink($dir1 . $filename);
}
0 голосов
/ 15 февраля 2011

Для каждого файла в устройствах проверьте, существует ли он в отключенном режиме, используя путь и имя файла из устройств.

<%

    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    

%>
0 голосов
/ 15 февраля 2011

В php используйте это для проверки, существует ли файл .... он вернет true или false ...

file_exists (относительный путь_файла)

...