2017-06-20 71 views
7

我保存在一個文件目錄下的文件中迅速3驗證碼:將文件保存在swift 3文件目錄中?

fileManager = FileManager.default 
// let documentDirectory = fileManager?.urls(for: .documentDirectory, in: .userDomainMask).first as String 
var path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as String 
path = path + name 

let image = #imageLiteral(resourceName: "Notifications") 
let imageData = UIImageJPEGRepresentation(image, 0.5) 
let bool = fileManager?.createFile(atPath: path, contents: imageData, attributes: nil) 

print("bool is \(bool)") 
return true 

但正如你所看到的,我沒有使用filemanager獲取文檔目錄路徑filemanager只給出網址不串。

問題:

  • 如何從文件管理器串?
  • 有沒有在我的代碼崩潰的機會?
+0

'讓文件管理器= FileManager.default.urls(爲:.documentDirectory在:.userDomainMask)。首先? .path' – WeiJay

回答

22

請想一想。

URL是處理文件路徑的推薦方式,因爲它包含所有便捷方法來添加和刪除路徑組件和擴展 - 而不是String Apple從中移除了這些方法。

您不鼓勵連接像path = path + name這樣的路徑。這很容易出錯,因爲您負責所有斜線路徑分隔符。

此外,您不需要使用FileManager創建文件。 Data有一個將數據寫入磁盤的方法。

let fileManager = FileManager.default 
do { 
    let documentDirectory = try fileManager.url(for: .documentDirectory, in: .userDomainMask, appropriateFor:nil, create:false) 
    let fileURL = documentDirectory.appendingPathComponent(name) 
    let image = #imageLiteral(resourceName: "Notifications") 
    if let imageData = UIImageJPEGRepresentation(image, 0.5) { 
     try imageData.write(to: fileURL) 
     return true 
    } 
} catch { 
    print(error) 
} 
return false 
-5

FUNC copyandpast(){

var path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true); 
    let dbpath :NSString = path[0] as NSString; 

    let strdbpath = dbpath.strings(byAppendingPaths: ["mydb.db"])[0] ; 
    print(strdbpath); 
    let fmnager = FileManager.default; 

    if !fmnager.fileExists(atPath: strdbpath) { 

     let local = Bundle.main.path(forResource: "mydb", ofType: "db"); 

     do 
     { 
      try fmnager.copyItem(atPath: local!, toPath: strdbpath) 

     }catch{ 

     } 



    } 


} 
2

繼vadian您需要保存(數據)文件中的文件目錄中唯一的一行給出上面的例子是:

試imageData.write(to:fileURL)

獲取文件路徑是有趣的部分

例如:創建文件路徑

func createNewDirPath()->URL{ 

let dirPathNoScheme = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as String 

    //add directory path file Scheme; some operations fail w/out it 
    let dirPath = "file://\(dirPathNoScheme)" 
    //name your file, make sure you get the ext right .mp3/.wav/.m4a/.mov/.whatever 
    let fileName = "thisIsYourFileName.mov" 
    let pathArray = [dirPath, fileName] 
    let path = URL(string: pathArray.joined(separator: "/")) 

    //use a guard since the result is an optional 
    guard let filePath = path else { 
     //if it fails do this stuff: 
     return URL(string: "choose how to handle error here")! 
    } 
    //if it works return the filePath 
    return filePath 
} 

調用該函數:

let shinnyNewURLpath = createNewDirPath() 


//write data to file using one line in do/catch operation 
do { 
    try yourDataObject?.write(to: shinnyNewURLpath) 
    } 
catch { 
     print("catch error",error.localizedDescription) 
} 
相關問題