2017-03-03 123 views
0

我想輸出一些字符串,我在我的應用程序中收集到一個文本文件。iOS:如何寫入項目中特定目錄下的文件?

的文本文件將一直存在在我的項目,像這樣:

我試圖改寫一切是新的(多行)字符串的文件中:

func writeFile(){ 

let theFile: FileHandle? = FileHandle(forWritingAtPath: "./MyFiles/file.txt") 

if theFile != nil { // This is always nil!!! 
    let data = ("Some text\nline 2\nline3\n" as String).data(using: String.Encoding.utf8) 

    // Write it to the file 
    theFile?.write(data!) 

    // Close the file 
    theFile?.closeFile() 
} 
else { 
    print("Writing failed.") 
} 

} // End file writing 

然而,FileHandler總是返回nil。我懷疑這是因爲我錯誤地提供了路徑和/或文件名?

我一直在谷歌搜索和堆棧溢出了幾個小時了...而且仍然不知道如何解決這個問題。我如何指定正確的位置和文件?

+1

應用程序包是隻讀的。 – vadian

+0

謝謝 - 這是有道理的。我現在的目標是寫入文檔目錄,但我仍然不確定如何去做。 – b1skit

回答

1

您無法在應用程序沙箱外寫入文件。每個iOS應用都有獨立的目錄Document,Library,tmp來存儲數據。

func writeFile(){ 

    let documentsPath = NSSearchPathForDirectoriesInDomains(.documentationDirectory,.userDomainMask,true) 
    let theFile: FileHandle? = FileHandle(forWritingAtPath: "\(documentsPath)/MyFiles/file.txt") 

    if theFile != nil { // This is always nil!!! 
     let data = ("Some text\nline 2\nline3\n" as String).data(using: String.Encoding.utf8) 

     // Write it to the file 
     theFile?.write(data!) 

     // Close the file 
     theFile?.closeFile() 
    } 
    else { 
     print("Writing failed.") 
    } 

} // End file writing 
+0

我得到一個錯誤「外來參數標籤‘NSSearchPathDirectory:NSSearchPathDomainMask:’」爲線 讓documentsPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory:0,NSSearchPathDomainMask:0,真) 我不知道發生了什麼事情,似乎有是一個額外的論據? 對於我的目的,寫入文檔目錄對我來說應該是很好的,我應該對另一個使用1個參數嗎? – b1skit

+0

對不起。我已經更新了我的答案。 –

0

我試圖改寫無論是文件

你可以不在家。寫入應用程序包是禁止的。

在這種情況下,正確的方法是,首次啓動時,將文件複製到可寫入的Documents文件夾中。現在您可以從那裏訪問它們,並且它們都是可讀寫的。

+0

謝謝,這是有道理的。我是Swift的新手,很遺憾,這讓我產生了一個非常類似的問題:如何寫入文檔目錄中的文件? – b1skit

+0

好的,但這已經被回答了數十億次。查看FileManager類。 – matt

相關問題