【问题标题】:iOS: How to write to a file at a specific directory in the project?iOS:如何写入项目中特定目录的文件?
【发布时间】:2017-03-03 16:36:49
【问题描述】:

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

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

我正在尝试用新的(多行)字符串覆盖文件中的所有内容:

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。我怀疑这是因为我提供的路径和/或文件名不正确?

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

【问题讨论】:

  • 应用程序包是只读的。
  • 谢谢 - 这是有道理的。我现在的目标是写入文档目录,但我仍然不确定如何去做。

标签: ios iphone swift file writing


【解决方案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

【讨论】:

  • 我得到一个错误“Extraneous argument labels 'NSSearchPathDirectory:NSSearchPathDomainMask:'”行 let documentsPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory:0,NSSearchPathDomainMask:0,true) 我不确定发生了什么,似乎有一个额外的论点?就我的目的而言,写入文档目录就可以了,我应该使用 1 个参数而不是另一个参数吗?
【解决方案2】:

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

你不能。禁止写入 app bundle。

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

【讨论】:

  • 谢谢,这是有道理的。我是 Swift 新手,很遗憾,这给我留下了一个非常相似的问题:如何写入文档目录中的文件?
  • 好的,但这已经被回答过无数次了。查看 FileManager 类。
猜你喜欢
  • 2019-06-16
  • 2016-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多