FileSmith 0.2.1

FileSmith 0.2.1

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布最新发布2018年9月
SwiftSwift 版本4.1
SPM支持 SPM

Kare Morstol 维护。



FileSmith 0.2.1

  • 作者:
  • Kare Morstol

运行 shell 命令 | 解析命令行参数 | 处理文件和目录


Build Status Platforms

FileSmith

一个用于处理本地文件和目录的强类型 Swift 库。

它区分文件路径和目录路径,以及路径和实际文件和目录,因为程序员知道哪些是哪些,当编译器也知道的话,它可能更为有用。

另请参阅

特性

  • 分别为文件路径、目录路径、读取文件、写入文件和目录提供独立类型。
  • 使用 Swift 原生的错误处理。
  • 列出目录内容(如果需要,递归列出)。
  • 使用 glob 通配符模式过滤。
  • 沙箱模式禁止更改当前工作目录以外的更改。
  • 类似于使用 Swift 的 print 函数将文本写入文件。

术语

路径
项目的位置(可能存在或不存在于本地文件系统中)。它可以是DirectoryPathFilePathAnyPath

文件
一个现有的常规文件或类似文件的对象,你可以从中读取和/或写入,如流、管道或套接字。或者指向这些对象的符号链接。

目录
一个现有的目录或指向目录的符号链接。基本上,在终端中你可以使用cd命令进入的任何东西。

项目
(没有更好的名称)
文件或目录。文件系统中任何具有路径的对象。

安全第一

Directory.sandbox == true(默认是这样)时,你只能在当前工作目录下更改文件或创建新文件和目录。尝试在其他地方进行更改将引发错误。

使用方法

更改当前工作目录

DirectoryPath.current = "/tmp"
Directory.current = Directory.createTempDirectory()

路径

// common functionality
let dirpath = DirectoryPath("dir/dir1")
var filepath: FilePath = "file.txt"
filepath = FilePath(base: "dir", relative: "file.txt")
filepath = FilePath("dir/file.txt")

filepath.relativeString
filepath.base?.string
filepath.absoluteString
filepath.string // relativeString ?? absoluteString
filepath.name
filepath.nameWithoutExtension
filepath.extension

// DirectoryPath only
dirpath.append(file: "file.txt")  // FilePath("dir/dir1/file.txt")
dirpath.append(directory: "dir2") // DirectoryPath("dir/dir1/dir2")
dirpath.isAParentOf(filepath)

创建

var dir1 = try dirpath.create(ifExists: .replace)
var dir2 = try Directory(create: "dir/dir2", ifExists: .throwError)
var dir3 = try dir2.create(directory: "dir3", ifExists: .open) // dir/dir2/dir3

var file1_edit = try filepath.create(ifExists: .open)
let file2_edit = try WritableFile(create: "file2.txt", ifExists: .open)
let file3_edit = try dir1.create(file: "file3.txt", ifExists: .open) // dir/dir1/file3

打开

dir1 = try dirpath.open()
dir2 = try Directory(open: "dir/dir2")
dir3 = try dir2.open(directory: "dir3")

let file1 = try filepath.open()
let file2 = try ReadableFile(open: "file2.txt")
let file3 = try dir1.open(file: "file3.txt")

读/写

file1_edit.encoding = .utf16 // .utf8 by default
file1_edit.write("some text...")
file1_edit.print("Just like Swift's own 'print' function.")
file1_edit.print(2, "words", separator: "-", terminator: "")
file2.write(to: &file1_edit)

let contents: String = file3.read()
for line in file3.lines() { // a lazy sequence
	// ...
}
while let text = file3.readSome() {
	// read pipes etc. piece by piece, instead of waiting until they are closed.
}

搜索/过滤

Directory.current.files(recursive: true)       // [file2.txt, dir/file1.txt, dir/dir1/file3.txt]
dir1.files("*3.*", recursive: true)            // [file3.txt]
Directory.current.directories(recursive: true) // [dir, dir/dir1, dir/dir2, dir/dir2/dir3]

符号链接

let dir1_link = try Directory(createSymbolicLink: "dir1_link", to: dir1, ifExists: .open)
let dir2_link = try dir1.create(symbolicLink: "dir2_link", to: dir2, ifExists: .open)
let file1_link = try ReadableFile(createSymbolicLink: "file1_link", to: file1, ifExists: .open)
let file2_link = try dir2.create(symbolicLink: "file2_link", to: file2, ifExists: .open) as ReadableFile

杂项

// the path of a file or directory
file1.path // FilePath
dir1.path  // DirectoryPath

// remove files and directories
try file1_edit.delete()
try dir1.delete()

类型

当打开文件时,符号链接始终被追踪,所以文件的类型永远不会是 .symbolicLink,但不存在的目标可以是为 .brokenSymbolicLink。

FileType("file.txt")
FileType(filepath)

public enum FileType: Equatable, Hashable {
	case regularFile
	case directory
	case characterSpecial
	case blockSpecial
	case socket
	case brokenSymbolicLink
	case namedPipe
	case unknown
}

安装

Swift 包管理器

.Package(url: "https://github.com/kareman/FileSmith", "0.2.1") 添加到您的 Package.swift 文件中。

import PackageDescription

let package = Package(
	name: "somename",
	dependencies: [
		.Package(url: "https://github.com/kareman/FileSmith", "0.2.1")
		 ]
	)

然后运行 swift build

CocoaPods

FileSmith添加到您的Podfile中。

pod "FileSmith", git: "https://github.com/kareman/FileSmith.git"

然后运行pod install来安装它。

许可协议

在MIT许可协议(MIT)下发布,https://open-source.org.cn/licenses/MIT

Kåre Morstøl,NotTooBad Software