如何使用取消链接删除.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_Storethumbs

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

解决方案:

感谢@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;
        }
    }
}

给TA打赏
共{{data.count}}人
人已打赏
未分类

NameValueCollection vs Dictionary<string,string>[重复]。

2022-9-13 13:34:38

未分类

nginx docker容器作为运行在docker容器中的服务的反向代理。

2022-9-13 13:34:40

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索