在应用程序组容器中快速创建目录
Posted
技术标签:
【中文标题】在应用程序组容器中快速创建目录【英文标题】:Create directory in app group container swift 【发布时间】:2016-02-21 20:41:32 【问题描述】:如何在我的应用的组容器中创建目录?
我尝试过用作文件管理器:
let directory: NSURL = NSFileManager.defaultManager().containerURLForSecurityApplicationGroupIdentifier("APP_GROUP_IDENTIFIER")!
但这不会创建目录...我该如何在此文件夹中创建目录?
【问题讨论】:
看NSFileManager
> createDirectoryAtURL..
所以我尝试使用 NSFileManager 但它仍然没有在我的应用程序组共享容器中创建目录....您是否允许写入容器?
使用 NSFileManager 我如何引用共享应用的容器呢?
【参考方案1】:
containerURLForSecurityApplicationGroupIdentifier
返回组容器的 URL。
要创建目录,请将新目录名称附加为路径组件
let fileManager = NSFileManager.defaultManager()
if let directory = fileManager.containerURLForSecurityApplicationGroupIdentifier("APP_GROUP_IDENTIFIER")
let newDirectory = directory.URLByAppendingPathComponent("MyDirectory")
try? fileManager.createDirectoryAtURL(newDirectory, withIntermediateDirectories: false, attributes: nil)
斯威夫特 3:
let fileManager = FileManager.default
if let directory = fileManager.containerURL(forSecurityApplicationGroupIdentifier: "APP_GROUP_IDENTIFIER")
let newDirectory = directory.appendingPathComponent("MyDirectory")
try? fileManager.createDirectory(at: newDirectory, withIntermediateDirectories: false, attributes: nil)
【讨论】:
这个现在应该是:let fileManager = FileManager.default if let directory = fileManager.containerURL(forSecurityApplicationGroupIdentifier: "APP_GROUP_IDENTIFIER") let newDirectory = directory.appendingPathComponent("my_dir") try! fileManager.createDirectory(at: newDirectory, withIntermediateDirectories: false, attributes: nil)
一个问题:在创建目录之前,不需要测试是否存在同名目录吗?
@IanBell 测试目录是否存在是一个很好的编程习惯。您可以将 withIntermediateDirectories
设置为 true 或将 try?
或 try
与 do - catch
块一起使用。
嗨@vadian 我想在共享文档目录中创建文件夹以及如何从共享文档目录访问文件夹数据。
共享文档目录是什么意思?
我正在使用自定义键盘扩展,然后从服务器下载键盘主题并保存到文档目录,但应用文档目录无法在自定义键盘扩展中访问,因此需要共享应用组目录。我该怎么办,请帮帮我。【参考方案2】:
检查您是否启用了“应用程序组” 权利。可以从project -> Capabilities -> App Group -> switch on开启。
添加应用组标识符“group.com.companyName.exampleApp”如上图。
现在您可以使用指定的标识符访问应用组容器。
让 appIdentifier = "group.com.companyName.exampleApp" 让 fileManager = NSFileManager.defaultManager() 让容器 = fileManager.containerURLForSecurityApplicationGroupIdentifier(appIdentifier)如果一切设置正确,您将在“容器”中获得一个 URL 地址。
现在,
做 如果让容器 = 容器 let directoryPath = container.URLByAppendingPathComponent("sampleDirectory")
var isDir : ObjCBool = false
if let path = directoryPath?.path where fileManager.fileExistsAtPath(path, isDirectory:&isDir)
if isDir
// file exists and is a directory
else
// file exists and is not a directory
else if let directoryPath = directoryPath
// file or directory does not exist
try fileManager.createDirectoryAtURL(directoryPath, withIntermediateDirectories: false, attributes: nil)
catch let error as NSError
print(error.description)
礼貌:文件和目录检查代码取自https://***.com/a/24696209/2666902
【讨论】:
以上是关于在应用程序组容器中快速创建目录的主要内容,如果未能解决你的问题,请参考以下文章
构建Nginx+Tomcat+MYSQLDocker容器实战
serilog应用在docker容器中,日志文件目录不会自动创建,需要手动创建目录,或者创建镜像的时候就包含进去