let fileURL = Bundle.main.url(forResource:"filename", withExtension: "txt")
"写作" 但是,您不能在那里写入。您需要创建一个副本,最好在Documents目录中:
func makeWritableCopy(named destFileName: String, ofResourceFile originalFileName: String) throws -> URL {
// Get Documents directory in app bundle
guard let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).last else {
fatalError("No document directory found in application bundle.")
}
// Get URL for dest file (in Documents directory)
let writableFileURL = documentsDirectory.appendingPathComponent(destFileName)
// If dest file doesn’t exist yet
if (try? writableFileURL.checkResourceIsReachable()) == nil {
// Get original (unwritable) file’s URL
guard let originalFileURL = Bundle.main.url(forResource: originalFileName, withExtension: nil) else {
fatalError("Cannot find original file “\(originalFileName)” in application bundle’s resources.")
}
// Get original file’s contents
let originalContents = try Data(contentsOf: originalFileURL)
// Write original file’s contents to dest file
try originalContents.write(to: writableFileURL, options: .atomic)
print("Made a writable copy of file “\(originalFileName)” in “\(documentsDirectory)\\\(destFileName)”.")
} else { // Dest file already exists
// Print dest file contents
let contents = try String(contentsOf: writableFileURL, encoding: String.Encoding.utf8)
print("File “\(destFileName)” already exists in “\(documentsDirectory)”.\nContents:\n\(contents)")
}
// Return dest file URL
return writableFileURL
}
示例用法:
let stuffFileURL = try makeWritableCopy(named: "Stuff.txt", ofResourceFile: "Stuff.txt")
try "New contents".write(to: stuffFileURL, atomically: true, encoding: String.Encoding.utf8)
//For Video File
let stringPath = Bundle.main.path(forResource: "(Your video file name)", ofType: "mov")
let urlVideo = Bundle.main.url(forResource: "Your video file name", withExtension: "mov")
8条答案
按热度按时间3lxsmp7m1#
只需在应用程序包中搜索资源
但是,您无法写入它,因为它位于应用程序资源目录中,您必须在文档目录中创建它才能写入它
现在您可以从fileURL访问它
编辑-2018年8月28日
以下是在Swift 4.2中执行此操作的方法
在文档目录中创建它
lskq00tm2#
Swift 3,基于Karim’s answer。
阅读
您可以通过捆绑包的资源读取应用捆绑包中包含的文件:
"写作"
但是,您不能在那里写入。您需要创建一个副本,最好在Documents目录中:
示例用法:
wdebmtf23#
只是一个快速更新使用此代码与Swift 4:
以下内容已更新,以说明如何写出文件:
这个特殊的例子不是最灵活的,但是通过一些工作,您可以轻松地传入您自己的文件名、扩展名和数据值。
esbemjvw4#
🎁属性 Package -提取并转换为正确的数据类型
这个简单的 Package 器可以帮助您以最干净的方式从任何包中加载任何文件:
用法:
您可以根据需要定义任何解码器
nfeuvbwi5#
Swift 5.1中从包中获取文件
jucafojl6#
包是只读的。您可以使用
NSBundle.mainBundle().pathForResource
以只读方式访问文件,但要进行读写访问,您需要将文档复制到Documents文件夹或tmp文件夹。6ju8rftf7#
捆绑包可以写入。您可以使用
Bundle.main.path
将文件添加到Copy Bundles Resource
中以覆盖文件。ffscu2ro8#
我不得不使用另一个包中的文件。所以,下面的代码对我很有用。当你使用框架时,这是必需的。