文件不会写入磁盘。我究竟做错了啥?
Posted
技术标签:
【中文标题】文件不会写入磁盘。我究竟做错了啥?【英文标题】:File won't write to disk. What am I doing wrong?文件不会写入磁盘。我究竟做错了什么? 【发布时间】:2015-02-25 15:40:34 【问题描述】:我正在尝试将一组对象保存到文件中。那已经失败了。因此,为了测试我的过程,我尝试将一个简单的字符串写入文件,但这也没有奏效。下面是我用来测试将字符串简单写入文件的代码。
var directoryPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
var path = directoryPath.stringByAppendingPathComponent(archivePath)
var checkFile = NSFileManager.defaultManager()
NSLog("Path: %@", path)
var testString = "Hi my name is ken"
var error : NSError?
var written = testString.writeToFile(path, atomically: true, encoding: NSASCIIStringEncoding, error: &error)
if ( written == false )
if ((error ) != nil)
var errString = error?.localizedDescription
NSLog( "Fail: %@", errString! )
var isDir : ObjCBool = false
var isFile = checkFile.fileExistsAtPath(directoryPath, isDirectory: &isDir)
if ( isDir )
NSLog("The directory %@, exists", directoryPath )
else
NSLog("The directory %@, does not exist", directoryPath )
这是 NSLog 语句的结果:
2015-02-25 08:37:29.280 ...应用程序名称... [14596:3911337] 路径:/Users/cs/Library/Developer/CoreSimulator/Devices/1747CFD7-5252-4221-AA89-BDEC1A57BA5A /data/Containers/Data/Application/5DC24B8F-A667-4ECD-B7E6-E139E65525E1/Documents/data/appdata.txt 2015-02-25 08:37:29.284 ...应用程序名称... [14596:3911337] 失败:操作无法完成。 (可可错误 4。) 2015-02-25 08:37:29.285 ...应用程序名称... [14596:3911337] 目录 /Users/cs/Library/Developer/CoreSimulator/Devices/1747CFD7-5252-4221-AA89-BDEC1A57BA5A/data/容器/数据/应用程序/5DC24B8F-A667-4ECD-B7E6-E139E65525E1/文档,存在
【问题讨论】:
在将内容写入文件之前,请确认该路径中不存在文件。 【参考方案1】:您没有包含存档路径,但我认为它是 /data/appdata.txt。
文档目录存在,但其中没有 /data 文件夹,除非您创建它。尝试将文件写入 /data/appdata.txt 不会自动创建数据目录。要么首先在 .DocumentzDirectory 中创建数据目录,要么尝试将文件保存到根目录(不带 /data/)。
【讨论】:
谢谢。我会试试的。【参考方案2】: var directoryPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
var path = directoryPath.stringByAppendingPathComponent(archivePath)
var checkFile = NSFileManager.defaultManager()
NSLog("Path: %@", path)
var testString = "Hi my name is ken"
var error : NSError?
//1. if your archivePath is just a file name with extension
//remove exist file first
var canWrite : bool = true
if (checkFile.fileExistsAtPath(path))
canWrite = checkFile.removeItemAtPath(path, error:&error)
if (!canWrite)
//show alert
//and return
return
//2. if your archivePath is a path with some folder, besure to create if folder does not exist and continue with //1.
var written = testString.writeToFil
e(path, atomically: true, encoding: NSASCIIStringEncoding, error: &error)
if ( written == false )
if ((error ) != nil)
var errString = error?.localizedDescription
NSLog( "Fail: %@", errString! )
var isDir : ObjCBool = false
var isFile = checkFile.fileExistsAtPath(directoryPath, isDirectory: &isDir)
if ( isDir )
NSLog("The directory %@, exists", directoryPath )
else
NSLog("The directory %@, does not exist", directoryPath )
【讨论】:
谢谢。当我可以回到项目中时,我会全力以赴。谢谢。【参考方案3】:创建目录有所帮助,但事实证明,问题的关键是我写入磁盘的数组有字典,其中包含与 plist 不兼容的值。 Array.writeToFile... 写入 Plist,如果数组中的数据与 plist 不兼容,则不会写入。我最终使用 NSKeyArchiver 和 NSKeyUnArchiver 来处理写入和读取。一旦我使用它并处理了目录问题,一切都奏效了。感谢大家的建议。
【讨论】:
以上是关于文件不会写入磁盘。我究竟做错了啥?的主要内容,如果未能解决你的问题,请参考以下文章