概述
当你的移动存储设备插入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))
}
}
到此就能将._的文件都删除掉了,大功告成。