fileURL.resourceValues 是 macOS/iOS 中用于获取文件 URL 各种元数据属性(Resource Values)的方式之一,基于 URLResourceValues 类型。
基本用法
let resourceValues = try fileURL.resourceValues(forKeys: [.fileSizeKey, .isDirectoryKey])
fileURL 是一个指向文件或目录的 URL(必须是本地文件 file:// 类型)。
resourceValues(forKeys:) 会返回该 URL 的一组元数据(封装为 URLResourceValues属性)。
常用属性
以下是部分可以从文件中读取的 .resourceKeys 列表:
1、.fileSizeKey:属性fileSize,文件大小(单位:字节)。
2、.isDirectoryKey:属性isDirectory,是否是目录。
3、.isRegularFileKey:属性isRegularFile,是否是常规文件。
4、.creationDateKey:属性creationDate,创建时间。
5、.contentModificationDateKey:属性contentModificationDate,最后修改时间。
6、.nameKey:属性name,文件名称。
7、.localizedNameKey:属性localizedName,本地化名称(如显示名)。
8、.isReadableKey:属性isReadable,是否可读。
9、.isWritableKey:属性isWritable,是否可写。
10、.fileResourceTypeKey:属性fileResourceType,文件类型(目录、文件、符号链接等)。
11、.isHiddenKey:属性isHidden,是否是隐藏文件。
12、.totalFileSizeKey:属性totalFileSize,对于包或目录,返回其总大小。
13、.volumeAvailableCapacityKey:属性volumeAvailableCapacity,所在卷的剩余容量。
14、.isSymbolicLinkKey:属性isSymbolicLink,是否是符号链接。
使用场景
1、读取文件大小和名称
let fileURL = URL(fileURLWithPath: "/Users/you/Desktop/image.jpg")
do {
let values = try fileURL.resourceValues(forKeys: [.fileSizeKey, .nameKey])
if let size = values.fileSize, let name = values.name {
print("文件名: \(name)")
print("文件大小: \(size) 字节")
}
} catch {
print("读取文件属性失败: \(error)")
}
2、读取图片文件的Finder大小
let resourceValues = try? fileURL.resourceValues(forKeys: [.totalFileAllocatedSizeKey])
let DiskSize = resourceValues?.totalFileAllocatedSize ?? 0
因为图片文件在Finder和实际大小不一样,所以需要通过 . totalFileAllocatedSizeKey 键获取大小。相关内容请见《SwiftUI获取文件大小/占用空间》。
总结
通过URL的resourceValues方法,可以获取文件的元属性。
如果想要获取文件的实际磁盘占用,只能通过URL的resourceValues(forKeys:)获取。
相关文章
1、Swift URL类:https://fangjunyu.com/2024/11/01/swift-url-%e5%ae%9e%e4%be%8b%e7%9b%b8%e5%85%b3%e7%9f%a5%e8%af%86/
2、SwiftUI获取文件大小/占用空间:https://fangjunyu.com/2025/07/10/swiftui%e8%8e%b7%e5%8f%96%e6%96%87%e4%bb%b6%e5%a4%a7%e5%b0%8f-%e5%8d%a0%e7%94%a8%e7%a9%ba%e9%97%b4/