fileManager.createFileAtPath始终失败

时间:2016-01-28 18:55:31

标签: ios swift nsfilemanager

我尝试调用fileManager.createFileAtPath - 方法,但它总是失败。 我的变量success始终为false。我在这里查看了一些类似的帖子,但完全不符合我的需求。 这是我的代码:

pListPath = NSURL(fileURLWithPath: String(reportsPath)).URLByAppendingPathComponent("myReports.plist", isDirectory: false)

                let data: NSData = NSData()
                var isDir: ObjCBool = false

            if fileManager.fileExistsAtPath(String(pListPath), isDirectory: &isDir)
                {
                    print("File already exists")
                }
                else
                {

                    let success = fileManager.createFileAtPath(String(pListPath), contents: data, attributes: nil)

                    print("Was file created?: \(success)")
                    print("plistPath: \(pListPath)")
                }

以下是我尝试解决此问题的方法:

我尝试使用方法

let success = NSFileManager.defaultManager().createFileAtPath(String(pListPath), contents: data, attributes: nil)

let success = data.writeToFile(String(pListPath), atomically: true)

但没有任何作用。 success始终为false。 我还尝试给它一个文字字符串作为路径,将contents设置为nil,我甚至更改了目录权限,我想把它放到777,但注意到工作。 success总是假的。我希望你能帮我解决这个问题。 任何帮助都非常感谢。谢谢

2 个答案:

答案 0 :(得分:7)

这是一个问题:

if fileManager.fileExistsAtPath(String(pListPath), isDirectory: &isDir)

您无法使用String(...)NSURL转换为文件路径字符串, 你必须使用path方法:

if fileManager.fileExistsAtPath(pListPath.path!, isDirectory: &isDir)

如果reportsPath也是NSURL,则

存在同样的问题
pListPath = NSURL(fileURLWithPath: String(reportsPath)).URLByAppendingPathComponent("myReports.plist", isDirectory: false)

应该是

let pListPath = reportsPath.URLByAppendingPathComponent("myReports.plist", isDirectory: false)

答案 1 :(得分:1)

确保您尝试在已存在的文件夹中创建文件。 首先创建文件夹,然后您可以在该路径上创建文件。

private class func assureDirPathExists(path: String)
{
    if !NSFileManager.defaultManager().fileExistsAtPath(path)
    {
        do {
            try NSFileManager.defaultManager().createDirectoryAtPath(path, withIntermediateDirectories: false, attributes: nil)
        } catch let error as NSError {
            print(error.localizedDescription)
        }
    }
}

确保您正在相对于用户域文件夹编写文件。

 // i.e. Caches, Documents...
 let rootPath = NSSearchPathForDirectoriesInDomains(.CachesDirectory, .UserDomainMask, true) 

可能您缺少斜杠字符,或者您先跳过一些文件夹创建。

如果你有... dir1 / dir2 / file.ext,你需要创建dir1,然后是dir2,最后是file.ext。