Dschee-FileKit 2.1.1

Dschee-FileKit 2.1.1

测试已测试
Lang语言 SwiftSwift
许可证 MIT
发布上次发布2016年7月
SPM支持 SPM

Cihat Gündüz维护。



  • 作者
  • Nikolai Vazquez


安装使用许可证文档

FileKit 是一个允许简单且表达力丰富的文件管理的 Swift 框架。

开发在 develop 分支进行。

安装

兼容性

  • OS X 10.9+ / iOS 8.0+ / watchOS 2.0 / tvOS 9.0

  • Xcode 7.1+, Swift 2.1+

使用

路径

路径使用 Path 结构处理。

let home = Path("~")
let drive: Path = "/Volumes/Macintosh HD"
let file:  Path = "~/Desktop/file\(1)"

操作

新文件

可以在 Path 上调用 createFile() 来创建一个空文件。

try Path(".gitignore").createFile()
新目录

可以通过在 Path 上调用 createDirectory() 来创建目录。

try Path("~/Files").createDirectory()
try Path("~/Books").createDirectory(withIntermediateDirectories: false)

默认创建中间目录。

新符号链接

可以在 Path 上调用 createSymlinkToPath(_:) 来创建符号链接。

try Path("path/to/MyApp.app").createSymlinkToPath("~/Applications")
print(Path("~/Applications/MyApp.app").exists)  // true
查找路径

使用以下命令可以找到桌面中有五个文件夹深处的所有以 ".txt" 扩展名的路径

let textFiles = Path.UserDesktop.find(searchDepth: 5) { path in
    path.pathExtension == "txt"
}

负数的 searchDepth 将导致它检查 self 中每个路径。

甚至可以将函数映射到找到的路径并获取非 nil 的结果

let documents = Path.UserDocuments.find(searchDepth: 1) { path in
    String(path)
}
遍历路径

由于 Path 符合 SequenceType,因此可以使用 for 循环遍历。

for download in Path.UserDownloads {
    print("Downloaded file: \(download)")
}
当前工作目录

可以使用 Path.Current 来更改进程的当前工作目录。

要快速更改当前工作目录到一个路径并返回,可以使用 changeDirectory(_:) 方法

Path.UserDesktop.changeDirectory {
    print(Path.Current)  // "/Users/nvzqz/Desktop"
}
公共祖先

可以获取两个路径之间的公共祖先

print(Path.Root.commonAncestor(.UserHome))       // "/"
print("~/Desktop"  <^> "~/Downloads")            // "~"
print(.UserLibrary <^> .UserApplicationSupport)  // "/Users/nvzqz/Library"
+ 运算符

将两个路径连接并返回结果

// ~/Documents/My Essay.docx
let essay = Path.UserDocuments + "My Essay.docx"

也可以用来连接一个字符串和一个路径,先把字符串值转换成 Path

let numberedFile: Path = "path/to/dir" + String(10)  // "path/to/dir/10"
+= 运算符

将右侧路径连接到左侧路径上。也适用于字符串。

var photos = Path.UserPictures + "My Photos"  // ~/Pictures/My Photos
photos += "../My Other Photos"                // ~/Pictures/My Photos/../My Other Photos
% 运算符

返回路径的标准化版本。

let path: Path = "~/Desktop"
path% == path.standardized  // true
* 运算符

返回路径的解析版本。

let path: Path = "~/Documents"
path* == path.resolved  // true
^ 运算符

返回路径的父路径。

let path: Path = "~/Movies"
path^ == "~"  // true
->> 运算符

将左侧路径上的文件移动到右侧路径。

Path 对应函数: moveFileToPath(_:)

File 对应函数: moveToPath(_:)

->! 运算符

在移动文件之前先删除左侧路径上的所有内容,强制将左侧路径上的文件移动到右侧路径。

+>> 运算符

将左侧路径上的文件复制到右侧路径。

Path 对应函数: copyFileToPath(_:)

File 对应函数: copyToPath(_:)

+>! 运算符

在复制文件之前先删除左侧路径上的所有内容,强制将左侧路径上的文件复制到右侧路径。

=>> 运算符

在右侧路径创建左侧路径的符号链接。

Path 对应函数: symlinkFileToPath(_:)

File 对应函数: symlinkToPath(_:)

=>! 运算符

在创建符号链接之前先删除左侧路径上的所有内容,强制在右侧路径创建左侧路径的符号链接。

下标访问

下标访问一个 Path 将返回其所有组成部分直到并包括索引。

let users = Path("/Users/me/Desktop")[1]  // /Users
standardize()

标准化路径。

等同于执行

somePath = somePath.standardized
resolve()

解析路径的符号链接。

等同于执行

somePath = somePath.resolved

文件

可以使用 File 和一个 DataType 作为其数据类型来创建文件。

let plistFile = File<NSDictionary>(path: Path.UserDesktop + "sample.plist")

文件可以通过大小进行比较。

运算符

|> 操作符

将左边的数据写入右边的文件。

do {
    try "My name is Bob." |> TextFile(path: Path.UserDesktop + "name.txt")
} catch {
    print("I can't write to a desktop file?!")
}

TextFile

TextFile 类允许读取和写入字符串到文件。

尽管它是 File 的子类,但 TextFile 仍然提供了一些 File 所不具备的功能。

|>> 操作符

将左边的字符串追加到右边的 TextFile

let readme = TextFile(path: "README.txt")
try "My Awesome Project" |> readme
try "This is an awesome project." |>> readme

DictionaryFile

File 的别名。

ArrayFile

File 的别名。

DataFile

File 的别名。

文件权限

FilePermissions 结构体允许查看针对给定文件当前进程的权限。

let swift: Path = "/usr/bin/swift"
print(swift.filePermissions)  // FilePermissions[Read, Execute]

数据类型

所有遵守 DataType 的类型都可以用作 File 的泛型类型。

可读协议

Readable 类型必须实现静态方法 readFromPath(_:)

所有 Readable 类型都可以使用 init(contentsOfPath:) 进行初始化。

可写协议

Writable 类型必须实现 writeToPath(_:atomically:)

使用 writeToPath(_:) 实现的写入默认是原子性的。

可写入到文件

具有接收文件路径字符串的 writeToFile(_:atomically:) 方法的类型可以简单地通过遵守 WritableToFile 来遵守 Writable

可写入转换

如果类型本身不能写入文件,但可以输出可写入类型,那么它可以遵守 WritableConvertible,并通过这种方式成为 Writable

FileKitError

所有由 FileKit 操作引发的错误的类型是 FileKitError

错误可以直接转换为 String 进行任何日志记录。如果只需要错误消息,FileKitError 有一个 message 属性说明错误发生的原因。

// FileKitError(Could not copy file from "path/to/file" to "path/to/destination")
String(FileKitError.CopyFileFail(from: "path/to/file", to: "path/to/destination"))

许可证

FileKit 及其资产在 MIT 许可证 下发布。资产可以在 assets 分支找到。