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 | 
                            Tags
                            
                        
                          
                          - File
 - 리뷰
 - tcp
 - Golang
 - mutex
 - http
 - window
 - Sync
 - Python
 - JavaScript
 - bitcoin
 - go언어
 - windows
 - go
 - channel
 - json
 - Callback
 - 책
 - GO 언어
 - C
 - c++
 - Linux
 - 영화
 - range
 - install
 - API
 - FOR
 - Close
 - package
 - write
 
                            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 : 파일 내용을 삭제