You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:52:54