iOS:如何写入项目中特定目录下的文件?

时间:2017-03-03 16:36:50

标签: ios iphone swift file writing

我试图将我在应用中收集的一些字符串输出到文本文件中。

文本文件将始终存在于我的项目中,如下所示:

我试图用新的(多行)字符串覆盖文件中的任何内容:

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。我怀疑这是因为我错误地提供了路径和/或文件名?

我已经谷歌搜索和堆栈溢出几个小时了...现在仍然不知道如何解决问题。如何指定正确的位置和文件?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

  

我正在尝试覆盖文件中的任何内容

你做不到。禁止写入应用程序包。

在这种情况下,正确的方法是,在首次启动时,将文件复制到例如可写的Documents文件夹中。现在你可以从那里访问它们,它们都是可读写的。