我尝试创建一些看起来像folde的deamon,如果我们插入新文件打开这个文件并做一些魔术,我使用这个(https://github.com/howeyc/fsnotify)FS通知器,但如果我打开文件我有错误“进程无法访问该文件,因为它正由另一个进程使用。“我找到一个肮脏的解决方案,时间睡眠100毫秒,但我认为这是不明确的方式
func main(){
watcher, err := fsnotify.NewWatcher()
if err != nil {
log.Fatal(err)
}
done := make(chan bool)
// Process events
go func() {
for {
select {
case ev := <-watcher.Event:
if ev.IsCreate() == true {
time.Sleep(100 * time.Millisecond)
file,err := os.OpenFile(path+ev.Name,os.O_RDWR|os.O_EXCL,0755)
if err !=nil{
panic(err)
}
//some code
file.Close()
}
case err := <-watcher.Error:
log.Println("error:", err)
}
}
}()
err = watcher.Watch("test")
if err != nil {
log.Fatal(err)
}
<-done
watcher.Close()
}
UPD:我为什么要这样做?
我有一个任务来创建数据库Webm文件,为了确定我是否已经在数据库中有这样的文件我应该得到文件的哈希值,但是在这种格式的规范中(https://matroska.org/technical/specs/index.html)是全局位Void块存储一些信息,因为该单元可以存储来自同一文件的不同信息将具有不同的哈希值,为此我使用我的函数找到该位块并重置它。