iOS 文件管理用法总结

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文件管理的一点用法,与诸位共勉

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • """1.个性化消息: 将用户的姓名存到一个变量中,并向该用户显示一条消息。显示的消息应非常简单,如“Hello ...
    她即我命阅读 8,588评论 0 5
  • 为了让我有一个更快速、更精彩、更辉煌的成长,我将开始这段刻骨铭心的自我蜕变之旅!从今天开始,我将每天坚持阅...
    李薇帆阅读 6,044评论 0 3
  • 似乎最近一直都在路上,每次出来走的时候感受都会很不一样。 1、感恩一直遇到好心人,很幸运。在路上总是...
    时间里的花Lily阅读 5,257评论 0 2
  • 1、expected an indented block 冒号后面是要写上一定的内容的(新手容易遗忘这一点); 缩...
    庵下桃花仙阅读 3,619评论 0 1
  • 一、工具箱(多种工具共用一个快捷键的可同时按【Shift】加此快捷键选取)矩形、椭圆选框工具 【M】移动工具 【V...
    墨雅丫阅读 3,579评论 0 0