Swift开发:如何实现目录存在性检查?已有创建目录函数需补充
没问题!我们可以利用FileManager的API来实现目录存在性检查,而且能准确区分目录和同名文件。先给你拆解一下思路,再给出具体代码:
1. 单个目录检查的核心函数
首先写一个通用的辅助函数,用来判断指定路径是否是已存在的目录——这里一定要用fileExists(atPath:isDirectory:)而不是单纯的fileExists(atPath:),因为后者无法区分同名文件和目录:
func doesDirectoryExist(at path: String) -> Bool { var isDirectory: ObjCBool = false let exists = FileManager.default.fileExists(atPath: path, isDirectory: &isDirectory) // 必须同时满足「路径存在」和「是目录」两个条件 return exists && isDirectory.boolValue }
2. 批量检查你的系统目录
针对你需要检查的json、inspirations、products三个目录,可以写一个批量检查的函数,返回每个目录的存在状态:
func checkSystemFoldersExistence() -> [String: Bool] { let targetFolders = ["json", "inspirations", "products"] var folderStatus = [String: Bool]() for folder in targetFolders { folderStatus[folder] = doesDirectoryExist(at: folder) } return folderStatus }
调用这个函数后,你会得到一个字典,比如["json": true, "inspirations": false],能清晰知道每个目录的状态。
额外优化:和你的创建函数结合
顺便提一句,你可以把检查逻辑整合到原有的createSystemFolders里,避免重复创建(虽然createDirectory默认不会因目录存在报错,但提前检查能让日志更清晰,也减少冗余操作):
func createSystemFolders() { let fileManager = FileManager.default // 把目录和对应错误标签配对,避免重复代码 let folderErrorPairs = [ ("json", ErrorsLabels.AppDelegate01), ("inspirations", ErrorsLabels.AppDelegate02), ("products", ErrorsLabels.AppDelegate03) ] for (folder, errorLabel) in folderErrorPairs { guard !doesDirectoryExist(at: folder) else { debugPrint("目录 \(folder) 已存在,跳过创建") continue } do { try fileManager.createDirectory(atPath: folder, withIntermediateDirectories: true, attributes: nil) debugPrint("成功创建目录 \(folder)") } catch let error as NSError { debugPrint("\(errorLabel): \(error)") } } }
这样你的代码会更简洁,逻辑也更连贯~
内容的提问来源于stack exchange,提问作者Łukasz Betta
相关产品推荐
相关产品推荐

