我們知道,在沙盒內,iOS要拷貝一個文件,可以使用
fileManager.copyItem(atPath: fullPath, toPath: fulltoPath)
方法簡單實現,不過當我們要拷貝的是一個整體文件夾(內部包含自文件夾等等)的話,該如何實現?
我自己測試了下,發現依然可以很便捷到實現
比如:我要實現下圖的文件夾拷貝,將cssjs文件夾整體拷貝到cssjs_temp內。
實現:
/// 拷貝文件夾
? ? ////// - Parameters:
? ? /// - fpath: 原始路徑,絕對路徑
? ? /// - tpath: 目標路徑,絕對路徑,注意:這里tpath路徑必須包含目標文件夾名稱,否則拷貝不了? ? func copyFile(fpath:String,tpath:String) {
? ? ? ? do{
? ? ? ? ? ? //如果已存在,先刪除,否則拷貝不了let fileManager = FileManager.defaultif 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?#>)
一個是無實體路徑,一個有實體路徑。
然后依然調用上文到拷貝方法即可。