golang
golang fsnotify를 이용한 폴더/파일 감시
PudgeKim
2021. 5. 14. 12:47
fsnotify package를 이용하기전에 go get -u golang.org/x/sys/... 를 먼저 설치해야합니다.
그 후에 go get github.com/fsnotify/fsnotify 를 설치합니다.
1
2
3
4
5
|
watcher, err := fsnotify.NewWatcher()
if err != nil {
log.Fatal(err)
}
defer func() { _ = watcher.Close() }()
|
cs |
위처럼 watcher를 생성하고 defer을 이용하여 나중에 닫아줍니다.
그 후 golang의 os package, ioutil.TempDir, filepath.Join 등을 이용하여 감시하려는 폴더 변수를 생성합니다.
이렇게 생성된 폴더변수를 tempDir이라고 하겠습니다.
1
2
3
4
|
err = watcher.Add(tempDir)
if err != nil {
log.Fatal(err)
}
|
cs |
위처럼 Add함수를 이용하여 해당 폴더를 추가하면 감시 대상이 됩니다.
1
2
3
4
5
6
7
8
9
10
|
go func() {
for {
select {
case event, ok := <- watcher.Events:
if !ok { return }
...
}
}
}
|
cs |
위처럼 고루틴에서 watcher.Event가 올때마다 체크하면서 폴더내에 변화를 체크해볼 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
targetFile := ".../someFile" // filepath.Join 등을 이용하는게 좋음
go func() {
for {
select {
case event, ok := <- watcher.Events:
if !ok { return }
if event.Name == targetFile {
...
}
}
}
}
|
cs |
만약 특정 파일이름을 체크하고 싶다면 위처럼 하면 될 것입니다.
1
2
3
4
|
case event.Op&fsnotify.Create == fsnotify.Create:
...
case event.Op&fsnotify.Remove == fsnotify.Remove:
...
|
cs |
위 같은 코드로 감시하고 있는 폴더내에 파일이 생성/삭제 되었는지도 확인할 수 있습니다.