【问题标题】:Full path of project项目全路径
【发布时间】:2014-07-05 02:02:02
【问题描述】:

我想在 Swift 中打开一个文本文件,我设法将完整路径作为参数传递:

let dados = String.stringWithContentsOfFile("/Users/aczuquim/Google Drive/Swift/Verdadeiro ou Falso/Verdadeiro ou Falso/Dados.txt", encoding: NSUTF8StringEncoding, error: nil)

既然我把文件加到项目里了,有什么办法可以使用相对路径吗?

当我使用相对路径时,会返回一个nil

更新

在操场上,下面的行正常工作:

let dados = String.stringWithContentsOfFile("/Users/aczuquim/Google Drive/Swift/Verdadeiro ou Falso/Verdadeiro ou Falso/dados.txt", encoding: NSUTF8StringEncoding, error: nil)

但不是以下那些(pathnil):

let bundle = NSBundle.mainBundle()
let path = bundle.pathForResource("dados", ofType: "txt")

【问题讨论】:

  • 我假设它在构建时被复制到 Resources 目录中,即它已被添加到项目设置中“构建阶段”下的“复制捆绑资源”中??
  • 您想访问资源目录中的文件而不是项目中的文件(两者不同)?
  • 项目和资源目录是一样的。但是如果我不使用完整路径,我就无法读取文件。而且我不想硬编码完整路径目录(想使用相对路径)
  • 项目和资源目录不一样。您给出的路径是您的项目目录。要转到 Resources 目录,请右键单击相应的目标并单击“在 Finder 中显示”。右键单击该应用程序,然后单击“显示包内容”。在里面稍微搜索一下,你应该会找到“资源”目录
  • 该文件在构建时从您的项目复制到此资源目录,以便它始终与您的应用程序保持一致。

标签: cocoa swift


【解决方案1】:

捆绑资源:

Swift 3.0

if let bundle = Bundle.main().urlForResource("Info", withExtension: "plist") {
    print("Path: \(bundle)")
}

Swift 2.0

let bundleURL = NSBundle.mainBundle()!.URLForResource("dados", withExtension: "txt")
        println("\(bundleURL)")

如果返回 nil 则表示找不到资源并报告错误(注意mainBundle 后面的感叹号)。检查构建阶段 - 如果包含资源,则复制捆绑资源。

应用和文档文件夹

[AnyObject]! 数组中获取文档文件夹,该数组将第一个对象转换为NSURL 类型:

let docFolderURL = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0] as NSURL
        println("DocumentFolderURL: \(docFolderURL)")

然后获取App文件夹,通过上一级文件夹删除最后一个路径组件:

let appFolderURL = docFolderURL.URLByDeletingLastPathComponent
println("AppFolderURL: \(appFolderURL)")

其他目录可以通过.URLByAppendingPathComponent(pathComponent: String?, isDirectory:Bool)等方式访问。

临时目录

var tempURL = NSURL.fileURLWithPath(NSTemporaryDirectory(), isDirectory: true).URLByDeletingLastPathComponent

请注意,Apple 现在更喜欢使用 URL 的 来访问文件夹和文件,并且新方法专门使用它们。要在旧方法中使用路径,只需调用:tempURL.path

【讨论】:

  • 成功了。它仅适用于应用程序,但不适用于游乐场。这是有道理的,因为操场独立于编译工作。对吗?
  • 你可能是对的,playground 没有编译成 App
猜你喜欢
  • 2023-04-08
  • 2012-04-29
  • 2014-04-09
  • 2014-05-21
  • 2020-11-12
  • 2011-03-13
  • 2016-12-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多