我們知道,在沙盒內,iOS要拷貝一個文件,可以使用
fileManager.copyItem(atPath: fullPath, toPath: fulltoPath)
方法簡單實現,不過當我們要拷貝的是一個整體文件夾(內部包含自文件夾等等)的話,該如何實現?
我自己測試了下,發現依然可以很便捷到實現
比如:我要實現下圖的文件夾拷貝,將cssjs文件夾整體拷貝到cssjs_temp內。
=====》
實現:
/// 拷貝文件夾 /// /// - Parameters: /// - fpath: 原始路徑,絕對路徑 /// - tpath: 目標路徑,絕對路徑,注意:這里tpath路徑必須包含目標文件夾名稱,否則拷貝不了 func copyFile(fpath:String,tpath:String) { do{ //如果已存在,先刪除,否則拷貝不了 let fileManager = FileManager.default if fileManager.fileExists(atPath: tpath){ try fileManager.removeItem(atPath: tpath) } try fileManager.copyItem(atPath: fpath, toPath: tpath) }catch{} }
這里有幾個小注意點:
1、目標路徑,要帶上文件夾名稱,而不能只寫父路徑,比如上文到目標路徑必須這樣:xxx/html/cssjs_temp/cssjs ,帶上最后的cssjs
2、如果要重命名,只需要將 xxx/html/cssjs_temp/cssjs_newName的最后文件夾名稱修改即可(cssjs_newName就是你要的新名稱)。
3、如果是覆蓋拷貝,就是說目標路徑已存在此文件夾,我們必須先刪除,否則提示make directory error(當然這里最好做一個容錯處理,比如拷貝前先轉移到其他路徑,如果失敗,再拿回來)
結束~
最后引申一下,最初我的需求 ,是將項目的文件,拷貝到沙盒內。
其原理是一樣到,只不過項目內文件到路徑與沙盒有點區別而已。
獲取項目內文件路徑:
Bundle.main.path(forResource: <#T##String?#>, ofType: <#T##String?#>)
Bundle.main.path(forResource: <#T##String?#>, ofType: <#T##String?#>, inDirectory: <#T##String?#>)
一個是無實體路徑,一個有實體路徑。
然后依然調用上文到拷貝方法即可。