根据NSFileManager.fileExistsAtPath?

时间:2015-06-16 13:32:13

标签: ios swift cocoa-touch file-io nsfilemanager

新版本

在iOS应用中,我需要阅读放置在资源包中的几个文本文件。我在课程MyClass中创建了以下测试代码:

private let bundle = NSBundle(forClass: MyClass.self)

private func testLoadResource() {
    var error: NSError? = NSError()
    for fileUrl in NSFileManager.defaultManager().contentsOfDirectoryAtURL(bundle.resourceURL!,
        includingPropertiesForKeys: nil, options: NSDirectoryEnumerationOptions.allZeros, error: &error)! {
        print("\(NSFileManager.defaultManager().fileExistsAtPath((fileUrl as! NSURL).absoluteString!)), ")
    }
}

此代码的控制台输出为:

false, false, false, false, false, false, false, false, false, false, false

NSFileManager.defaultManager().contentsOfDirectoryAtURL根据NSFileManager.defaultManager().fileExistsAtPath找不到contentsOfDirectoryAtURL找到的文件?怎么可能?

显然,我放在资源包中的资源文件可以由fileExistsAtPath找到,但不能由NSFileManager的{​​{1}}函数找到。我也找不到如何阅读它们的方法。请帮忙。

另请注意,我需要阅读的课程MyClass(上面带有测试代码)和资源文本文件都位于iOS框架中。

原始问题

在我的iOS应用程序中需要读取我放在资源包中的几个文本文件。但是,从代码中读取这些文件我遇到了很大的麻烦。我创建了以下测试代码:

private let bundle = NSBundle(forClass: MyClass.self)

private func testLoadResource() {
    var error: NSError? = NSError()
    if let k = NSFileManager.defaultManager().contentsOfDirectoryAtURL(bundle.resourceURL!, includingPropertiesForKeys: nil, options: NSDirectoryEnumerationOptions.allZeros, error: &error) {
        for i in k {
            println(String(contentsOfFile: (i as! NSURL).absoluteString!, encoding: NSUTF8StringEncoding, error: &error))
            println(error)
        }
    }
}

对于我放在包中的所有文本文件,上面的代码会产生以下错误输出:

Optional(Error Domain=NSCocoaErrorDomain Code=260 "The operation couldn’t be completed. (Cocoa error 260.)" 
UserInfo=0x17407aa40 {NSFilePath=file:///private/var/mobile/Containers/Bundle/Application/73BEA20A-FC36-46EB-B27B-2124FF24BAFD/EasyType.app/Frameworks/EasyTypeShared.framework/blurredTest.text, 
NSUnderlyingError=0x17404e5b0 "The operation couldn’t be completed. No such file or directory"})

blurredTest.text是我放在捆绑包中的文件的名称。该文件显然存在,因为contentsOfDirectoryAtURL为文件夹bundle.resourceURL!返回了其URL,但错误表明它不存在!同时使用NSFileManager.defaultManager().fileExistsAtPath(i)测试是否存在false

请注意,文本文件blurredTest.text位于iOS框架中,并且不能阅读课程MyClass中的代码(上图)。

那么如何阅读该文件?

1 个答案:

答案 0 :(得分:-1)

NSFileManager' s contentsOfDirectoryAtURL返回的数组是包含传入路径目录中每个文件名称的字符串。例如,如果您的捆绑路径为/MyGreatApp/Resources/并且您有一个名为SomeText.txt的文件,那么从contentsOfDirectoryAtURL返回的数组将是SomeText.txt,而不是/MyGreatApp/Resources/SomeText.txt 。因此,当您从数组中获取项目并询问文件管理器是否存在时,它会查看文件实际所在的/SomeText.txt而不是/MyGreatApp/Resources/SomeText.txt

如果您从contentsOfDirectoryAtURL获取数组中的每个结果并将其附加到捆绑网址的末尾,您应该会看到更好的结果。