Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- range
- http
- tcp
- go
- 영화
- Sync
- Python
- mutex
- bitcoin
- window
- install
- GO 언어
- c++
- package
- File
- write
- 책
- Golang
- json
- Close
- channel
- FOR
- Callback
- C
- 리뷰
- JavaScript
- Linux
- windows
- go언어
- API
Archives
- Today
- Total
Code Habit
Go 언어 ) 파일 쓰기 본문
golang에서 os 패키지를 사용해 파일 Read/Write를 편하게 할 수 있다. 다음은 사용되는 함수이다.
- func OpenFile(name string, flag int, perm FileMode)(file *File, err error) : 파일 플래그, 파일 모드를 지정하여 파일 열기
- func (f* File) Close() error : 파일을 닫음
- func (f* File) Write(b []byte) (n int, err error) : 파일에 값을 씀. 쓴 데이터의 길이와 에러 값 리턴
- func (f* File) Read() (b []byte)(n int, err error) : 파일의 내용을 읽음. byte형식으로 기록되며 읽은 Count와 에러 값 리턴
사용 예제
// main.go
package main
import (
"fmt"
"os"
)
func main() {
file, err := os.OpenFile("file.txt", os.O_CREATE|os.O_RDWR|os.O_TRUNC /*|os.O_APPEND*/, os.FileMode(0644))
if err != nil {
fmt.Println(err)
}
defer file.Close()
wData := []byte("Write First")
count, err := file.Write(wData)
if err != nil {
fmt.Println(err)
}
rData := make([]byte, 4096)
file.Seek(0, os.SEEK_SET)
count, err = file.Read(rData)
if err != nil {
fmt.Println(err)
}
fmt.Println("Read Data : ", string(rData), "\r\ncount : ", count)
}
|
O_RDWR( Read/Write )용으로 'file.txt' 파일을 연다. 만약 파일이 없으면 O_CREATE플래그로 인하여 새로 생성된다. 그리고 파일을 열 때 안의 내용은 다 지워진다.( O_TRUNC ) cf) O_APPEND : 안의 내용 남고 뒤에서 시작 !
파일에 문자를 쓸때 byte형으로 변환하고 byte형으로 읽어온 후 string으로 변환하여 출력한다. 여기서 주의할 점은 읽기 전 Seek()함수로 읽기/쓰기 위치를 파일의 맨처음으로 옮겨주어야 한다. 만약 빠뜨리면 파일을 제대로 읽어오지 못하고 "EOF" 에러가 발생한다.
다음은 파일을 열때(OpenFile) 사용되는
< flag 표 >
os.O_RDONLY : 읽기 전용
os.O_WRONLY : 쓰기 전용
os.O_RDWR : 읽기 쓰기 모드
os.O_APPEND : 뒤에 내용 덧붙임
os.O_CREATE : 파일이 없으면 새로 생성. 있으면 Open
os.O_SYNC : 동기 I/O 사용
os.O_TRUNC : 파일 내용을 삭제