将数据写入具有持久存储的文件,swift
write data to file with persistent storage, swift
我使用核心数据存储用户信息,我尝试使用"writeToFile".
写入测量数据(来自内置加速度计)
核心数据运行良好,用户数据持久化存储;然而,"writeToFile"存储的那些测量数据文件在写入很长period/newer个文件后就会逐渐消失。
我应该使用SQLite 还是任何其他数据库来存储测量数据文件?或者是否可以使用核心数据来存储文件(虽然似乎无法实现)?我想将用户数据和测量数据都保存到持久存储中。感谢您的建议!!
func writeToFile () {
let firstName = String(trial!.project!)
let secondName = String(trial!.record!)
let exportFilePath = NSTemporaryDirectory() + "\(firstName)_\(secondName).csv"
let exportFileURL = NSURL(fileURLWithPath: exportFilePath)!
NSFileManager.defaultManager().createFileAtPath(exportFilePath, contents: NSData(), attributes: nil)
更新:
使用 "NSFileManager.defaultManager().URLForDirectory" 解决了问题。最终代码如下所示:
我不确定您是否需要说明 "createDirectoryAtURL" 或者是否可以创建文件。
let documentsURL = NSFileManager.defaultManager().URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: NSURL(), create: true, error: nil)
NSFileManager.defaultManager().createDirectoryAtURL(documentsURL!, withIntermediateDirectories: true, attributes: nil, error: nil)
let fileURL = documentsURL!.URLByAppendingPathComponent("\(firstName).csv")
NSFileManager.defaultManager().createFileAtPath(fileURL.path!, contents: NSData(), attributes: nil)
let fileHandle = NSFileHandle(forWritingToURL: fileURL, error: nil)
if let fileHandle = fileHandle {
...
fileHandle.writeData(csvData!)
...
您正在使用 NSTemporaryDirectory
来存储您的文件。该目录的全部意义在于这些文件是 临时文件 ,这意味着操作系统可以随意删除它们。你说他们在 "a long period" 之后消失了;这正是 NSTemporaryDirectory
.
的预期行为
如果您需要保留文件,您应该使用 NSFileManager
上的 urls(for:in:)
方法来获取文件目录的位置 (.documentDirectory
)。
我使用核心数据存储用户信息,我尝试使用"writeToFile".
写入测量数据(来自内置加速度计)核心数据运行良好,用户数据持久化存储;然而,"writeToFile"存储的那些测量数据文件在写入很长period/newer个文件后就会逐渐消失。
我应该使用SQLite 还是任何其他数据库来存储测量数据文件?或者是否可以使用核心数据来存储文件(虽然似乎无法实现)?我想将用户数据和测量数据都保存到持久存储中。感谢您的建议!!
func writeToFile () {
let firstName = String(trial!.project!)
let secondName = String(trial!.record!)
let exportFilePath = NSTemporaryDirectory() + "\(firstName)_\(secondName).csv"
let exportFileURL = NSURL(fileURLWithPath: exportFilePath)!
NSFileManager.defaultManager().createFileAtPath(exportFilePath, contents: NSData(), attributes: nil)
更新: 使用 "NSFileManager.defaultManager().URLForDirectory" 解决了问题。最终代码如下所示:
我不确定您是否需要说明 "createDirectoryAtURL" 或者是否可以创建文件。
let documentsURL = NSFileManager.defaultManager().URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: NSURL(), create: true, error: nil)
NSFileManager.defaultManager().createDirectoryAtURL(documentsURL!, withIntermediateDirectories: true, attributes: nil, error: nil)
let fileURL = documentsURL!.URLByAppendingPathComponent("\(firstName).csv")
NSFileManager.defaultManager().createFileAtPath(fileURL.path!, contents: NSData(), attributes: nil)
let fileHandle = NSFileHandle(forWritingToURL: fileURL, error: nil)
if let fileHandle = fileHandle {
...
fileHandle.writeData(csvData!)
...
您正在使用 NSTemporaryDirectory
来存储您的文件。该目录的全部意义在于这些文件是 临时文件 ,这意味着操作系统可以随意删除它们。你说他们在 "a long period" 之后消失了;这正是 NSTemporaryDirectory
.
如果您需要保留文件,您应该使用 NSFileManager
上的 urls(for:in:)
方法来获取文件目录的位置 (.documentDirectory
)。