iOS 文件管理用法总结

595 阅读2分钟
iOS文件都有哪些?

iOS 文件管理有四个目录 Documents、Library/Caches、tmp Documents目录: FileManager.documentDirectory 用户主动保存的持久化数据 Library/Caches目录:FileManager.cachesDirectory 可重新下载的缓存数据 tmp目录: NSTemporaryDirectory() 短期使用的临时视频

如何选择
  1. 用户主动下载且需要长期保留的视频 适用场景:用户明确选择离线保存、不可重新下载的视频(如付费内容、用户创作素材) 存储路径: Documents目录 注意事项:需为文件添加NSURLIsExcludedFromBackupKey属性,避免被iCloud自动备份 方法如下: let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first! let fileURL = documentsURL.appendingPathComponent("video.mp4") try data.write(to: fileURL) try fileURL.setResourceValue(true, forKey: .isExcludedFromBackupKey) 2.可重新下载或临时缓存的数据 适用场景‌ 应用自动缓存、可重复下载的视频(如流媒体播放缓存、临时预览文件等) 存储路径‌:Library/Caches 目录 优势‌系统可自动清理该目录,避免占用过多存储空间‌12。
  • 路径获取方法 let cachesURL = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask).first!‌
创建目录
let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
let mapDir = documentsURL.appendingPathComponent("目录1/目录2")
createDirectoryIfNeeded(at: mapDir)
安全创建目录
/// - 参数 directoryURL: 目标目录的完整URL
func createDirectoryIfNeeded(at directoryURL: URL) throws {
let fileManager = FileManager.default
var isDirectory: ObjCBool = false
// 先检测路径是否存在且为目录
if fileManager.fileExists(atPath: directoryURL.path, isDirectory: &isDirectory) {
    guard isDirectory.boolValue else {
        throw NSError(domain: "路径已被文件占用", code: 409, userInfo: nil)
    }
    return // 目录已存在,无需创建
}

// 不存在则创建多级目录‌
try fileManager.createDirectory(
    at: directoryURL,
    withIntermediateDirectories: true,
    attributes: nil
)

}
安全写入文件(自动处理覆盖逻辑)

/// - 参数 fileURL: 目标文件的完整URL /// - 参数 data: 要写入的二进制数据

func safeWriteFile(at fileURL: URL, data: Data) throws {
let fileManager = FileManager.default
// 检测文件是否已存在‌
if fileManager.fileExists(atPath: fileURL.path) {
    try fileManager.removeItem(at: fileURL) // 删除旧文件以覆盖‌
}

// 确保父目录存在‌
try createDirectoryIfNeeded(at: fileURL.deletingLastPathComponent())

// 写入新数据‌:ml-citation{ref="5,8" data="citationList"}
try data.write(to: fileURL)

// 标记防备份(仅限 Documents 目录)
if fileURL.path.contains("Documents") {
    var resourceValues = URLResourceValues()
    resourceValues.isExcludedFromBackup = true
    try fileURL.setResourceValues(resourceValues)
}

}
/// 检查文件是否存在
func checkPathExists(_ url: URL) -> (isDirectory: Bool, exists: Bool) {
        var isDirectory: ObjCBool = false
        let exists = FileManager.default.fileExists(atPath: url.path,isDirectory: &isDirectory)
        return (isDirectory.boolValue, exists)
}

以上就是在使用iOS文件管理的一点用法,与诸位共勉