我想在fileManager根路径下创建一个文件夹,但是在创建之前,我想检查该文件夹是否存在,如果不存在,我就创建,否则就保留它
这是我使用的功能
public func isDirectoryExist(path: String) -> Bool {
let fileManager = FileManager.default
var isDir : ObjCBool = false
if fileManager.fileExists(atPath: path, isDirectory:&isDir) {
if isDir.boolValue {
return true
} else {
return false
}
} else {
return false
}
}
public func createNewDirectory(name: String) {
let DocumentDirectory = NSURL(fileURLWithPath: NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0])
let DirPath = DocumentDirectory.appendingPathComponent(name)
do
{
try FileManager.default.createDirectory(atPath: DirPath!.path, withIntermediateDirectories: true, attributes: nil)
}
catch let error as NSError
{
Logger.logError("Unable to create directory \(error.debugDescription)")
}
Logger.logInfo("Dir Path = \(DirPath!)")
}
现在,当我检查现有文件夹时,它总是错误的并创建一个新文件夹,并且每次都会发生
func createARObjectDirectory() {
let rootURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
if isDirectoryExist(path: "\(rootURL.absoluteString)\(DefaultURL.arObjectUrlDirectoryName)") {
Logger.logServer("ARObject directly found")
} else {
createNewDirectory(name: DefaultURL.arObjectUrlDirectoryName)
}
}
然后我打印根url,似乎url中间的哈希值总是不同,我如何检查它?
file:///var/mobile/Containers/Data/Application/5AD0690B-498D-4309-8BD0-191FB88766AC/Documents/AR-Object/
file:///var/mobile/Containers/Data/Application/41D35A54-1807-417E-AE29-311D43FCC21D/Documents/AR-Object/
file:///var/mobile/Containers/Data/Application/F7E385CC-7921-4C37-B9BF-BCEFFC2AEE9E/Documents/AR-Object/
file:///var/mobile/Containers/Data/Application/4748B014-5E55-46BB-BC83-394A6BC27292/Documents/AR-Object/
感谢您的帮助
您使用了错误的 API。
absoluteString
(在 rootURL.absoluteString
中)返回包含方案 file://
的字符串表示形式。文件系统 URL 的正确 API 是 path
我建议尽可能使用URL相关的API
public func directoryExists(at url: URL) -> Bool {
let fileManager = FileManager.default
var isDir : ObjCBool = false
if fileManager.fileExists(atPath: url.path, isDirectory:&isDir) {
return isDir.boolValue
} else {
return false
}
}
并以更可靠的方式编写 URL
func createARObjectDirectory() {
let documentsDirectory = URL.documentsDirectory
if directoryExists(at: documentsDirectory.appendingPathComponent(DefaultURL.arObjectUrlDirectoryName) {
Logger.logServer("ARObject directly found")
} else {
createNewDirectory(name: DefaultURL.arObjectUrlDirectoryName)
}
}
这也更快捷
public func createNewDirectory(name: String) {
let documentsDirectory = URL.documentsDirectory
let dirURL = documentsDirectory.appendingPathComponent(name)
do
{
try FileManager.default.createDirectory(at: dirURL, withIntermediateDirectories: false, attributes: nil)
}
catch let error as NSError
{
Logger.logError("Unable to create directory \(error.debugDescription)")
}
Logger.logInfo("Dir Path = \(dirPath.path)")
}
应用程序文档目录的实际路径可能会发生变化。您应该使用文档目录中的相对路径,而不是尝试比较运行之间的路径。
(我相信每次重建或重新安装应用程序时路径都会发生变化,但对于应用程序商店构建而言{相当}稳定。)
您是说您在文档目录中创建的目录在运行之间消失了?这不应该是真的。文档目录的内容应该保留。