FileKit 5.2.0

FileKit 5.2.0

测试已测试
语言语言 SwiftSwift
许可证 未知
发布最后发布2018年9月
SPM支持 SPM

Nikolai Vazquezphimage 维护。



FileKit 5.2.0

  • 作者:
  • Nikolai Vazquez

Platform Language: Swift CocoaPods Carthage
downloads Trello Board GITTER: join chat License

安装用法许可证文档

FileKit 是一个 Swift 框架,它允许简单的文件管理。

开发在 develop 分支上进行。

安装

兼容性

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

  • Xcode 7.1+, Swift 2.1+

使用 CocoaPods 安装

CocoaPods 是Objective-C 和 Swift的集中式依赖管理器。访问 这里 了解更多信息。

  1. 将项目添加到您的 Podfile

    use_frameworks!
    
    pod 'FileKit', '~> 5.0.0'
  2. 运行 pod install 并打开 .xcworkspace 文件以启动 Xcode。

  3. 导入 FileKit 框架。

    import FileKit

使用Carthage进行安装

Carthage是一个Objective-C和Swift的分布式依赖管理器。

  1. 将项目添加到您的Cartfile中。

    github "nvzqz/FileKit"
    
  2. 运行carthage update并按照附加步骤将FileKit添加到您的项目中。

  3. 导入 FileKit 框架。

    import FileKit

使用方法

路径

使用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").symlinkFile(to: "~/Applications")
print(Path("~/Applications/MyApp.app").exists)  // true
查找路径

使用以下代码可以查找桌面下五层文件夹中所有扩展名为".txt"的路径:

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

负的searchDepth将会使它运行,直到所有self中的路径都被检查。

您甚至可以将一个函数映射到找到的路径上,并获得非空结果

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"
+= 操作符

将右侧路径附加到左侧路径。也适用于 String

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 对应方法:moveFile(to:)

File 对应方法:move(to:)

->! 操作符

强制将左侧路径处的文件移至右侧路径,在移动文件之前删除左侧路径中的任何内容。

+>> 操作符

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

Path 对应项: copyFile(to:)

File 对应项: copy(to:)

+>! 运算符

强制将左路径的文件复制到右路径,在复制文件之前删除左路径上的任何内容。

=>> 运算符

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

Path 对应项: symlinkFile(to:)

File 对应项: symlink(to:)

=>! 运算符

强制在右路径创建左路径的符号链接,在创建符号链接之前删除左路径上的任何内容。

下标引用

Path 进行下标引用将返回其所有组件,直到包括索引本身。

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

标准化路径。

等同于执行

somePath = somePath.standardized
resolve()

解析路径的符号链接。

等同于执行

somePath = somePath.resolved

文件

可以使用具有数据类型(DataType)的File创建文件。

let plistFile = File<Dictionary>(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类允许将字符串读取和写入文件。

虽然它是File<String>的子类,但TextFile提供了一些File<String>没有的功能。

>> 操作符

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

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

NSDictionaryFile

它是File<NSDictionary>的类型别名。

NSArrayFile

表示为 File<бас>NSAayсе 的别称

NSDataFile

表示为 File<巴斯>NSData 的别称

DataFile

DataFile 类允许将 Data 读写到文件。

虽然它是 File 的子类,但 DataFile 提供了一些 File 没有的功能。您可以指定 Data.Read_DestroyOptionsData.Write_DestroyOptions

Encodable/Decodable

您可以使用任何 Codable 对象与 File 一起使用。

extension AnyCodableClass: JSONReadableWritable {} // if you want json encoding/decoding

let codableFile = File<AnyCodableClass>(path: path)
try codableFile.write(toEncode)
let decoded: AnyCodableClass = try codableFile.read()

或者,您可以使用实用方法

try FileKit.write(toEncode, to: path)
let decoded: AnyCodableClass = try FileKit.read(from: path)

文件权限

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

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

数据类型

所有符合 DataType 的类型都可以用作 File 的泛型类型。

可读协议

Readable类型必须实现静态方法 read(from: Path)

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

可写协议

Writable类型必须实现write(to: Path, atomically: Bool)

使用write(to: Path)完成的写入默认是原子性的。

将内容写入文件

具有使用文件路径字符串的 write(toFile:atomically:) 方法的类型可以通过简单地符合 WritableToFile 来符合 Writable

可写转换

如果一个类型本身不能写入到文件,但可以输出可写类型,那么它可以通过符合WritableConvertible成为可写的。

文件工具包错误

FileKit操作抛出的所有错误的类型是FileKitError

错误可以直接转换为进行任何日志记录。如果只需要错误消息,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 分支中找到。