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 |
위 같은 코드로 감시하고 있는 폴더내에 파일이 생성/삭제 되었는지도 확인할 수 있습니다.
'golang' 카테고리의 다른 글
go get과 go install (Golang) (0) | 2021.05.11 |
---|---|
Goland undefined 오류 해결하기 (0) | 2021.04.26 |
./ 경로 사용시 주의점 (0) | 2021.04.25 |
golang network bytes함수를 이용한 marshal/unmarshal (0) | 2021.04.18 |
golang network udp connection 기초 (0) | 2021.04.17 |