如何创建用于编写

时间:2016-10-12 20:04:32

标签: swift file

我在文件中写文本时遇到问题。到目前为止我所做的是:我有一个字符串,其中包含要存储的文本,文件名也是一个字符串。

let someText = "abcd"
let fileName = "file:///xxx"

当然“xxx”是文档目录下的.txt文件,因此应该可以写入 然后我发现我可以使用字符串的write方法。但是对于这个调用我需要文件名作为url所以我有这段代码:

let fileUrl = URL(string: fileName)
do {
    try someText.write(to: fileUrl, atomically: false, encoding: String.Encoding.utf8)
}
catch { }

如果我启动我的应用程序,那么我将收到错误“文件xxx不存在”。好的,这是正确的,因为没有创建文件。我认为write方法会自动执行,但似乎不是这样 这就是我不知道如何解决这个问题的一点!

我正在使用Xcode 8 + Swift 3。

+++ EDIT +++

我试着解释一下我正在寻找的东西 假设我有两个任务:第一个任务构建文件名并将其存储在数据库中。这就是我使用字符串的原因:

var fileName = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false).path
if (!fileName.hasSuffix("/")) {
    fileName += "/"
}
fileName += "file.txt"

正如您所见,此时未创建该文件,因为我只需要此任务中的名称。

好的,然后是第二个任务。它必须从数据库中选择一个特定的文件名,并将其附加到file:// scheme:

let fileName = "file://" + fileNameFromDatabase

然后用上面的代码写下文本 很明显,此任务中不存在该文件,因为我只有该名称。这就是为什么我认为write方法的错误信息是正确的 我现在正在寻找的是可以一步创建文件/写文本。

3 个答案:

答案 0 :(得分:17)

Swift 3示例:

func write(text: String, to fileNamed: String, folder: String = "SavedFiles") {
    guard let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first else { return }
    guard let writePath = NSURL(fileURLWithPath: path).appendingPathComponent(folder) else { return }
    try? FileManager.default.createDirectory(atPath: writePath.path, withIntermediateDirectories: true)
    let file = writePath.appendingPathComponent(fileNamed + ".txt")
    try? text.write(to: file, atomically: false, encoding: String.Encoding.utf8)
}

答案 1 :(得分:0)

我最近试图做一些问题:

"my string".writeToURL...

这是教程中有多少教你如何做到这一点。最终我想出了这个方法(快速2.3,我道歉)。我一直收到一个错误,说我没有写作的许可。然后我开始得到你的错误。底部对我有用。 param file就是你想要的文件名。

func writeDataToFile(file: String)-> Bool{

    let documentsPath = NSURL(fileURLWithPath: NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0])
    let logsPath = documentsPath.URLByAppendingPathComponent("yourFolderDirectory")
    do {
        try NSFileManager.defaultManager().createDirectoryAtPath(logsPath!.path!, withIntermediateDirectories: true, attributes: nil)
    } catch let error as NSError {
        NSLog("Unable to create directory \(error.debugDescription)")
    }

    let str = "hello world"

    let fileName = logsPath?.URLByAppendingPathComponent(file + ".txt")

    do{
        try str.writeToURL(fileName!, atomically: false, encoding: NSUTF8StringEncoding)
        return true
    } catch let error as NSError {
        print("Ooops! Something went wrong: \(error)")
        return false
    }
}

答案 2 :(得分:0)

Swift 5.4 示例

以下是在 Documents 目录中创建 test.txt 的示例。

import Foundation

let filePath = NSHomeDirectory() + "/Documents/" + "test.txt"
if (FileManager.default.createFile(atPath: filePath, contents: nil, attributes: nil)) {
    print("File created successfully.")
} else {
    print("File not created.")
}

参考 - Create Text File in Swift