FileSystem
FileSystem
是一个简单、紧凑的面向协议的框架,用于在 iOS、tvOS、watchOS 和 macOS 上处理文件系统。
为了安全和一致性,所有基于 Item
的 API 都实现为可以抛出错误的函数。这主要是因为其他不受应用程序控制的外部进程可以在任何时间修改文件系统,加上 Swift 3 对可以抛出错误的属性没有概念。
类型
FileSystem
中主要的类型如下,其中协议被强调:
- 路径
- 路径表示
- 父级
- 子项
- 可复制
- 可复制子项
- 可移动
- 可移动子项
- 可重命名
- 可删除
- 可回收
- 可链接
- 符号链接
- 别名
- 文件句柄转换
- 文件包装转换
- 项目
- 文件
- 常规文件
- 符号链接
- 别名文件
- 目录
- 卷
路径
Path
用于表示磁盘上的位置,这意味着您不再需要在 String
和 URL
之间切换。
Path
可以通过一个 String
来表示为 RawRepresentable
,因此可以使用默认构造函数进行初始化(如果 rawValue
无效,将返回 nil)
let path = Path(rawValue: "/")
由于这种情况非常常见,可以省略 rawValue
参数标签
let path = Path("/")
Path
采用 ExpressibleByStringLiteral
,这意味着当类型可以被编译器推断时,可以完全省略初始化器
let path: Path = "/"
如前所述,当前的 API 混合了 String
和 URL
表示形式,因此为了使事情更加简单,Path
也可以用文件 URL 进行初始化
let path = Path(url)
Path
提供了各种 API 以访问其组件
public var components: [String]
public var lastComponent: String
public var componentsToDisplay: [String]?
除了基于现有组件创建新的路径外
public func appendingComponent(_ component: String) -> Path
public func deletingLastComponent() -> Path
public func replacingLastComponent(with component: String) -> Path
还有一个 API 可以访问路径的扩展名
public var `extension`: String
有 API 可以解析和标准化一个 Path
public var resolved: Path
public var standardized: Path
除了查看一个 Path
是否已经存在之外
public var exists: Bool
要访问给定路径的 Item
,可以使用项目属性
public var item: Item?
PathRepresentable
PathRepresentable
可以被任何可以被 Path
表示的事物采用。
var path: Path { get }
init?(path: Path)
初始化器应当返回 nil,如果 PathRepresentable
不存在或者不是正确的类型。
Item
Item
是所有可以由 Path
表示的文件系统项目的基 协议
。 Item
采用 PathRepresentable
,CustomStringConvertible
和 CustomDebugStringConvertible
。
Item
增加了一个附加的初始化器,它不需要检查 Item
是否在给定的 Path
中存在,这对于 FileSystem
框架的效率内部使用(例如,当系统 API 返回有效的路径表示时)是必需的
init(_ path: Path)
它还要求路径属性可以被设置
var path: Path { get set }
Item
具有以下 API
public func exists() throws -> Bool
public func localizedName() throws -> String
public func isReadable() throws -> Bool
public func isWritable() throws -> Bool
public func isExecutable() throws -> Bool
public func isHidden() throws -> Bool
public func isPackage() throws -> Bool
public func isApplication() throws -> Bool
public func isAliasFile() throws -> Bool
public func isSymbolicLink() throws -> Bool
public func creationDate() throws -> Date
public func contentAccessDate() throws -> Date
public func contentModificationDate() throws -> Date
public func attributeModificationDate() throws -> Date
public func attributes() throws -> [FileAttributeKey: Any]
public func setAttributes(_ attributes: [FileAttributeKey: Any]) throws
Parent
Parent
是一个可以为另一个 Item
作为父项的 协议
。
Parent
协议提供访问其子项目的 API
func subitems() throws -> [Subitem]
func isEmpty() throws -> Bool
func contains(_ subitem: Subitem) throws -> Bool
子项
子项
协议
用于表示可以成为另一个项
子项的项
。
子项
协议
提供了访问其根卷和父目录的API。
func rootVolume() throws -> Volume
func parentDirectory() throws -> Directory?
可复制
可复制
协议
用于表示可以复制的项
。
func copy(to path: Path) throws -> Self
可复制子项
可复制子项
协议
用于表示采用了可复制
和子项
的项
。
func copy(into parent: Parent) throws -> Self
可移动
可移动
协议
用于表示可以移动到另一个路径
的项
。
mutating func move(to path: Path) throws
可移动子项
可移动子项
协议
用于表示采用了可移动
和子项
的项
。
mutating func move(into parent: Parent) throws
可重命名
可重命名
协议
用于表示可以进行重命名的项
。
mutating func rename(to name: String) throws
可删除
可重命名
协议
用于可以删除的 项
,注意该项会立即被删除。
func remove() throws
可回收利用的
可回收利用的
协议
用于可以被放入回收站的 项
。
在 macOS 上,该 协议
具有以下 API
mutating func trash() throws
可链接的
可链接的
协议
用于可以将 路径
硬链接到 项
上。
func link(to path: Path) throws -> Linkable
符号链接可用的
符号链接可用的
协议
用于可以将 路径
符号链接到 项
上。
func symbolicLink(to path: Path) throws -> SymbolicLink
可别名的
可别名的
协议
用于可以被别名的 项
。
文件句柄可转换的
文件句柄可转换的
协议
用于可以将 项
转换为可供读取、写入或更新(读取和写入)的 文件句柄
。
func fileHandleForReading() throws -> FileHandle
func fileHandleForWriting() throws -> FileHandle
func fileHandleForUpdating() throws -> FileHandle
文件包装可转换的
文件包装可转换的
协议
用于可以将 项
转换为 文件包装
。
func fileWrapper() throws -> FileWrapper
文件
文件
是单个文件的基协议
,采用了项目
、子项
、可复制
、可复制子项
、可移动
、可移动子项
、可重命名
、可删除
、可回收站
、可链接
、符号链接
和别名
。
文件
具有以下API
public func isContentEqual(to file: Self) -> Bool
常规文件
常规文件
是一个采用文件
、文件句柄可转换
和文件包装器可转换
的结构
,用于表示常规文件(即非符号链接或别名)。
常规文件
具有以下API
public func size() throws -> Int
符号链接
符号链接
是一个采用文件
和文件包装器可转换
的结构
,用于表示符号链接。
符号链接
包含一个API来检索其目标
public func destination() throws -> SymbolicLinkable
别名文件
别名文件
是一个采用文件
协议
的结构
,用于表示别名文件。
别名文件
包含一个API来检索其目标
public func destination() throws -> Aliasable
目录
目录
是一个采用项目
、父项
、子项
、可复制
、可复制子项
、可移动
、可移动子项
、可重命名
、可删除
、可回收站
、符号链接
、别名
和文件包装器可转换
的结构
。
目录
具有访问系统目录的API
public static var temporary: Directory
public static var document: Directory
public static var library: Directory
public static var caches: Directory
public static var application: Directory
public static var applicationSupport: Directory
public static var desktop: Directory
public static var downloads: Directory
public static var movies: Directory
public static var music: Directory
public static var pictures: Directory
public static var applications: [Directory]
public static var libraries: [Directory]
目录
有一个API可以访问与另一个项目
的关系
public func relationship(to item: Item) throws -> FileManager.URLRelationship
除了在路径
上创建目录
的API外
static public func create(at path: Path, withIntermediateDirectories: Bool = false, attributes: [String : Any]? = nil) throws -> Directory
还有一个API用于返回容器目录
public static func container(forSecurityApplicationGroupIdentifier groupIdentifier: String) -> Directory?
卷
卷
是一个采用 Item
、Parent
、Renameable
、Linkable
和 SymbolicLinkable
的 struct
。
卷
提供了一个 API 用于访问所有挂载的卷
public static var mounted: [Volume]
除了访问 卷
本身信息的 API
public func totalCapacity() throws -> Int
public func availableCapacity() throws -> Int
public func usedCapacity() throws -> Int
public func isEjectable() throws -> Bool
public func isRemovable() throws -> Bool
public func isInternal() throws -> Bool
public func isLocal() throws -> Bool
public func isReadOnly() throws -> Bool
在 macOS 上您还可以卸载 卷
public func unmount(withOptions options: FileManager.UnmountOptions = [], completionHandler: @escaping (Error?) -> Void)