在 Linux 和 macOS 上使用统一的 API 监视目录中的文件更改。
检测文件更改是一项操作系统特定的任务,并且在每个主要平台上的实现方式都不同。Linux 使用 sys/inotify,而 macOS 缺少此功能,并提供 FSEventStream
。 即使有许多针对特定平台的示例,接口仍然不同。
为了解决这个问题,我们创建了 FileMonitor 包。 我们包含了来自各种来源的代码,这些代码没有得到积极维护,以便为在所有受支持平台上检测目录中的文件更改提供可靠且一致的接口。
FileMonitor 专注于监视给定目录中的文件更改。它提供以下特性:
所有事件都通过使用可切换的枚举类型的委托函数传播。
可以使用 Swift Package Manager 轻松安装 FileMonitor。 只需将以下行添加到您的 Package.swift 文件中的依赖项中:
.package(url: "https://github.com/aus-der-Technik/FileMonitor.git", from: "1.0.0")
不要忘记将产品 "FileMonitor" 添加为您的目标的依赖项
.product(name: "FileMonitor", package: "FileMonitor"),
使用示例
import FileMonitor
import Foundation
struct FileMonitorExample: FileDidChangeDelegate {
init() throws {
let dir = FileManager.default.homeDirectoryForCurrentUser.appending(path: "Downloads")
let monitor = try FileMonitor(directory: dir, delegate: self )
try monitor.start()
for await event in monitor.stream {
switch event {
case .added(let file):
print("New file \(file.path)")
default:
print("\(event)")
}
}
}
}
使用示例
import FileMonitor
import Foundation
struct FileMonitorExample: FileDidChangeDelegate {
init() throws {
let dir = FileManager.default.homeDirectoryForCurrentUser.appending(path: "Downloads")
let monitor = try FileMonitor(directory: dir, delegate: self )
try monitor.start()
}
public func fileDidChanged(event: FileChange) {
switch event {
case .added(let file):
print("New file \(file.path)")
default:
print("\(event)")
}
}
}
您可以在 Sources/FileMonitorExample 中找到一个命令行应用程序示例。
FileMonitor 与 macOS 和 Linux 平台上的 Swift 5.7+ 兼容。
[x] MacOS [x] Linux [] Windows
感谢您考虑为 FileMonitor Swift 包做出贡献! 欢迎并非常感谢您的贡献。
如果您遇到任何错误或对新功能有想法,请在 GitHub 存储库上打开一个 issue。 打开 issue 时,请提供尽可能多的详细信息,包括重现该错误的步骤或对新功能的清晰描述。
也欢迎提交 Pull Requests (PR)! 如果您实现了错误修复或添加了新功能,请按照以下步骤提交 PR:
Fork 该存储库并从 main 创建您的分支。
进行更改,确保遵循包中使用的代码样式和约定。
编写测试来覆盖您的更改(如果适用)。
确保所有现有测试都通过。
如有必要,更新文档和 README.md。
使用描述性的提交消息提交您的更改。 7. 将您的分支推送到您 fork 的存储库。
在主存储库上打开一个 PR,提供对您的更改的详细描述。
请注意,所有贡献都将由维护人员进行审查,他们可能会在合并更改之前提供反馈或请求修改。
这个包建立在巨人的肩膀上。 我们采用了现有的代码并对其进行了清理,提供了一个在所有目标机器上看起来都相同的统一接口。
该软件深受以下启发:
FileMonitor Swift 包是在 MIT 许可证下发布的。