繁体   English   中英

Swift - 如何获取文件夹内的文件路径

[英]Swift - How do I get the file path inside a folder

我在一个文件夹中有一组音频文件。 当文件放置在主包中时,我可以访问该文件,但是如果将文件移动到文件夹内,我将无法访问这些文件。

代码:

let audioFileName:String = "audioFiles/" + String(index)
let audioFile = NSBundle.mainBundle().pathForResource(audioFileName, ofType: "mp3")!

我在文件夹 audioFiles 中有一个音频文件,我想获取它的路径。

错误:

致命错误:在解开 Optional 值时意外发现 nil

首先确保将文件夹 audioFiles 拖到项目中以根据需要检查复制项目并选择创建文件夹引用。 如果您的项目,请确保它显示一个蓝色文件夹。

在此处输入图片说明

在此处输入图片说明

NSBundle 方法 pathForResource 也有一个初始化程序,您可以指定文件所在的目录:

let audioFileName = "audioName" 

if let audioFilePath = Bundle.main.path(forResource: audioFileName, ofType: "mp3", inDirectory: "audioFiles") {
    print(audioFilePath)
}

如果您想获取该文件的 URL,您可以使用 NSBundle 方法 URLForResource(withExtension:, subdirectory:)

if let audioFileURL = Bundle.main.url(forResource: audioFileName, withExtension: "mp3", subdirectory: "audioFiles") {
    print(audioFileURL)
}

Leo 的答案应该有效,关键步骤是检查“如果需要,请复制项目”。 但是,如果您已经创建了一个文件或忘记了那个关键步骤,您会怎么做?

它很容易修复。

转到Project -> Build Phases -> Copy Bundle Resources

在此处输入图片说明

在这里,您将看到已添加到捆绑包中的所有文件的方便列表(包括所有 xcassets!)

单击添加按钮,找到丢失的未链接文件。

您的代码现在可以工作(我构建了自己的示例,因此它的名称与您的名称不同):

        if let url = Bundle.main.url(forResource: "testData2", withExtension: "txt") {
            do {

                let myData = try Data(contentsOf: url)
                print(myData.count)
            } catch {
                print(error)
            }
        }

那么为什么我们没有找到文件开始呢? 简单的。 我们问的是捆绑。 “嘿,我的文件在哪里”。 Bundle 就像......我不知道那个文件,如果你检查了它的一部分(正在复制的 Bundle 资源)的列表,它就不存在了。 达!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM