FileSystem 0.3

FileSystem 0.3

测试已测试
语文语言 SwiftSwift
许可证 BSD-3-Clause
发布上次发布2018年4月
SPM支持 SPM

Spencer MacDonald 维护。



  • Spencer MacDonald

FileSystem

Language Carthage compatible Cocoapods Compatible Platform

FileSystem 是一个简单、紧凑的面向协议的框架,用于在 iOS、tvOS、watchOS 和 macOS 上处理文件系统。

为了安全和一致性,所有基于 Item 的 API 都实现为可以抛出错误的函数。这主要是因为其他不受应用程序控制的外部进程可以在任何时间修改文件系统,加上 Swift 3 对可以抛出错误的属性没有概念。

类型

FileSystem 中主要的类型如下,其中协议被强调:

  • 路径
  • 路径表示
  • 父级
  • 子项
  • 可复制
  • 可复制子项
  • 可移动
  • 可移动子项
  • 可重命名
  • 可删除
  • 可回收
  • 可链接
  • 符号链接
  • 别名
  • 文件句柄转换
  • 文件包装转换
  • 项目
  • 文件
  • 常规文件
  • 符号链接
  • 别名文件
  • 目录

路径

Path 用于表示磁盘上的位置,这意味着您不再需要在 StringURL 之间切换。

Path 可以通过一个 String 来表示为 RawRepresentable,因此可以使用默认构造函数进行初始化(如果 rawValue 无效,将返回 nil)

let path = Path(rawValue: "/")

由于这种情况非常常见,可以省略 rawValue 参数标签

let path = Path("/")

Path 采用 ExpressibleByStringLiteral,这意味着当类型可以被编译器推断时,可以完全省略初始化器

let path: Path = "/"

如前所述,当前的 API 混合了 StringURL 表示形式,因此为了使事情更加简单,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 采用 PathRepresentableCustomStringConvertibleCustomDebugStringConvertible

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?

是一个采用 ItemParentRenameableLinkableSymbolicLinkablestruct

提供了一个 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)