首页 > 解决方案 > 如何使用取消链接删除 .DS_Store

问题描述

我创建了一个简单的函数来删除文件夹内的所有文件和文件夹本身。

function fn_delete_dir($dir)
{
    if (is_dir($dir)) {
        $dir = rtrim($dir, '/') . '/'; // add slash to end of string
        $files = glob($dir . '*', GLOB_MARK);

        foreach ($files as $vfile) {
            if (is_dir($vfile)) {
                fn_delete_dir($vfile);
            } else {
                unlink($vfile);
            }
        }

        rmdir($dir);

        return 1;
    }
}


$dir = $_SERVER['DOCUMENT_ROOT'] . '/page/videography/images/videos/thumbs';

if (fn_delete_dir($dir)) {
    echo 'all files deleted';
} else {
    echo 'deletion failed';
}

这用于在我的 Windows 机器上工作。由于我切换到 Mac,此功能因 msg 而失败

Warning: rmdir(/Users/xxx/Sites/page/videography/images/videos/thumbs/): Directory not empty in /Users/xxx/Sites/[age/testing.php on line 18

我做了一个scandir只是为了检查是否有隐藏文件,我得到了以下

   Array
(
    [0] => .
    [1] => ..
    [2] => .DS_Store
    [3] => thumbs
)

我猜问题是.DS_Store和/或thumbs

那么,问题是如何删除这些隐藏文件?

标签: phpmacos

解决方案


感谢@axiac,我能够使用 opendir() / readdir() / closedir() 重新创建函数

此功能能够删除文件,如thumbs .DS_Store...

function fn_delete_dir($dir)
{
    if (is_dir($dir)) {
        $dir = rtrim($dir, '/') . '/'; // add slash to end of string

        if ($dh = opendir($dir)) {
            while (($file = readdir($dh)) !== false) {
                if ($file != "." && $file != "..") {
                    if (is_dir($dir . $file)) {
                        fn_delete_dir($dir . $file);
                    } else {
                        unlink($dir . $file);
                    }
                }
            }

            closedir($dh);
            rmdir($dir . $file);

            return 1;
        }
    }
}

推荐阅读