我在文件夹中有一组音频文件。我可以在文件放在主捆绑包时访问该文件,但如果文件在文件夹中移动,我将无法访问这些文件。
代码:
<?php
if (isset($_POST["submit"])) {
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$from = 'Demo Form';
$to = 'example@gmail.com';
$body = "From: $name\n E-Mail: $email\n Message:\n $message";
if (!$_POST['name']) {
$errName = 'Please enter your name';
}
if (!$_POST['email'] || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
$errEmail = 'Please enter a valid email address';
}
if (!$_POST['message']) {
$errMessage = 'Please enter your message';
}
if (!$errName && !$errEmail && !$errMessage) {
if (mail ($to, $subject, $body, $from)) {
$result='<div class="alert alert-success">Thank You</div>';
} else {
$result='<div class="alert alert-danger">Please try again later</div>';
}
}
}
?>
我在audioFiles文件夹中有一个音频文件,我希望得到它的路径。
错误:
致命错误:在解包可选值时意外发现nil
答案 0 :(得分:42)
首先确保将文件夹audioFiles拖到项目中以选择创建文件夹引用,它应该显示一个蓝色文件夹。
NSBundle方法pathForResource还有一个初始化程序,您可以在其中指定文件所在的目录:
let audioFileName = "audioName"
if let audioFilePath = Bundle.main.path(forResource: audioFileName, ofType: "mp3", inDirectory: "audioFiles") {
print(audioFilePath)
}
如果您想获取该文件URL,可以使用NSBundle方法URLForResource(withExtension:,子目录:)
if let audioFileURL = Bundle.main.url(forResource: audioFileName, withExtension: "mp3", subdirectory: "audioFiles") {
print(audioFileURL)
}
答案 1 :(得分:1)
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资源)列表,则该文件不存在。 taDa!