macOS之如何删除插入u盘后会生成的._开头的隐藏文件

macOS之如何删除插入u盘后会生成的._开头的隐藏文件

概述

当你的移动存储设备插入Mac电脑中时,修改里面的文件就会在生成的文件里多增加了一个._开头的隐藏文件,当在window下显示隐藏文件就可以查看到,虽然没啥影响,但是如果有特殊开发需求的项目来说,这多余的文件将会造成很大的困扰。目前网上找的方法关闭生成都没啥用,唯一的办法就是将生成的文件全部删除。

删除方法

首先需要遍历所有的文件,拿到所有文件的路径

/// 获取文件路径
/// - Parameter dirPath: 根目录
/// - Returns: 路径数组
func getAllFilePath(_ dirPath: String) -> [String] {
    var filePaths = [String]()
    let manger = FileManager.default
    do {
        let fileIsExists = manger.fileExists(atPath: dirPath)
        if fileIsExists {
            if FileManager.directoryIsExists(path: dirPath){
                filePaths.append(dirPath)
                let rootarray = try manger.contentsOfDirectory(atPath: dirPath)
                for root in rootarray{
                    filePaths.append(contentsOf: getAllFilePath(dirPath+"/"+root))
                    
                }
                
            }else{
                filePaths.append(dirPath)
            }
            
        }
        
    } catch let error as NSError {
        print("get file path error: \(error)")
    }
    
    return filePaths
}

这方法遍历是拿不到隐藏的._文件的,但是隐藏文件都是在这些文件的前面加了._根据这个规律,我们可以手动将遍历的文件夹路径修改为._开头的文件路径,这样就可以逐一删除了。
首先,扩展下string,拿到子字符串在此字符串中的索引:

extension String {
    //返回第一次出现的指定子字符串在此字符串中的索引
    //(如果backwards参数设置为true,则返回最后出现的位置)
    func positionOf(sub:String, backwards:Bool = false)->Int {
        var pos = -1
        if let range = range(of:sub, options: backwards ? .backwards : .literal ) {
            if !range.isEmpty {
                pos = self.distance(from:startIndex, to:range.lowerBound)
            }
        }
        return pos
    }
}

重新修改路径列表,使其修改为对应隐藏文件的路径:

///清除自动生成的隐藏文件
func clearHideFile(_ path: String){
    let allfile =  getAllFilePath(path)
    for index in allfile.indices{
        var data = allfile[index]
        //拿到对应的位置
        let dataIndex = data.index(data.startIndex, offsetBy: data.positionOf(sub: "/", backwards: true)+1)
        //在最后一个/位置后添加._
        data.insert(contentsOf: "._", at: dataIndex)
        print(data)
        //删除即可
        try? FileManager.default.removeItem(at: URL(fileURLWithPath: data))
        
    }
}

到此就能将._的文件都删除掉了,大功告成。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值