natefinch/atomic
GitHub: natefinch/atomic
一个 Go 语言原子文件写入库,通过先写临时文件再原子替换的策略,确保文件写入要么完全成功要么完全不修改,避免写入中途失败导致的数据丢失。
Stars: 208 | Forks: 11
# atomic
```
import "github.com/natefinch/atomic"
```
atomic 是一个用于原子文件写入的 go package
默认情况下,在 go(以及通常任何语言)中写入文件可能会在过程中失败……此时你会得到一个只写入了一部分的文件,并且该文件可能在写入开始时就被截断了,砰的一声,现在你已经丢失了数据。
这个 go package 避免了这个问题,它首先写入一个临时文件,然后以原子的方式覆盖目标文件。这在 linux 上很容易,os.Rename 本身就是原子的。然而,在 Windows 上,os.Rename 不是原子的,因此可能会发生糟糕的事情。通过封装 Windows API moveFileEx,我们可以确保移动是原子的,并且我们可以放心,要么移动完全成功,要么两个文件都不会被修改。
## func ReplaceFile
```
func ReplaceFile(source, destination string) error
```
ReplaceFile 将目标文件或目录原子地替换为源文件或目录。它保证要么完全替换目标文件,要么不更改任何文件。
## func WriteFile
```
func WriteFile(filename string, r io.Reader) (err error)
```
WriteFile 将 r 的内容原子地写入指定的 filepath。如果发生错误,保证目标文件要么完全写入,要么完全不写入。WriteFile 会覆盖该位置存在的任何文件(但前提是写入完全成功,否则现有文件不会被修改)。
标签:EVTX分析, Go, Ruby工具, 原子操作, 开发工具库, 数据一致性, 文件系统, 日志审计