如何创建用于写作的文本文件

Posted

技术标签:

【中文标题】如何创建用于写作的文本文件【英文标题】:How to create text file for writing 【发布时间】:2016-10-12 20:04:31 【问题描述】:

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

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。

+++ 编辑 +++

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

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

fileName += "file.txt"

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

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

let fileName = "file://" + fileNameFromDatabase

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

【问题讨论】:

调用write时是否报错? 对不起我的错误。我忘了说:抛出了一个错误,我将其转换为 NSError,localizedDescription 是我在帖子中写的消息 - 文件 xxx 不存在。 您在尝试写入文件时遇到该错误?这似乎不对。 @rmaddy:try write后直接抛出错误。 你说文件在 Documents 文件夹下。您是指直接在 Documents 文件夹中还是在 Documents 的某个子文件夹中?并更新您的问题,展示您如何真正获得 fileName 的价值。 【参考方案1】:

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)

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

我最近尝试这样做时遇到了一些问题:

"my string".writeToURL...

本教程中有多少部分向您展示了如何做到这一点。最终我想出了这个方法(我道歉的是swift 2.3)。我一直收到一个错误,说我没有写权限。然后我开始得到你的错误。底部为我工作。参数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
    

【讨论】:

您的示例是 Swift 3 代码吗?好像有点老了。 F.e.我没有使用 writeToURL。 @altralaser 不是,它在 swift 2.3 中(我在答案中有这个),但认为它可以提供帮助。翻译应该是直截了当的。 首先 - 感谢您的示例。但是我的问题不是建立正确的文件名或找到文档目录。我的问题是写作过程。而且移植你的代码并不容易,因为 Swift 3 中有很多变化。如果我还是这样做了,那么我或多或少会得到我在帖子中使用的代码,问题仍然是一样的:为什么我可以' t 创建/写入?

以上是关于如何创建用于写作的文本文件的主要内容,如果未能解决你的问题,请参考以下文章

在写作之前删除所有以前的文本

如何解析文本文件并使用构造函数中的文件输入来创建对象容器

用于在硬盘中创建文本文件的 html 或 java 脚本代码

如何一次读取并附加到文本文件?

如何把批处理文件里面输出的内容输出到文本

如何将长文本文件字段放入列表框?