golang 기본 메모(18) - 파일 조작: 파일 스위치, 간단한 읽기와 쓰기 실례, 파일 읽기와 쓰기 위치 설정, 파일 삭제, 파일 이름 바꾸기
32108 단어 golang 기초 소기golanggo
파일 열기 및 닫기
os
패키지의 Open()
함수는 파일을 읽기 전용으로 열 수 있으며, 함수는 *File
및 err
으로 되돌아옵니다.열린 파일은 호출 Close()
방법으로 닫을 수 있습니다.Open()
함수 정의:func Open(name string) (*File, error)
Open()
함수는 파일 경로를 수신하고 파일 바늘과 가능한 구체적인 오류를 되돌려줍니다.Close()
메서드 정의:func (file *File) Close() error
예:
import (
"fmt"
"os"
)
func main() {
file, err := os.Open("./main.go")
if err != nil {
fmt.Println("open file failed!, err:", err)
return
}
// , defer
defer file.Close()
}
파일 읽기
읽기() 방법
정의:
func (f *File) Read(b []byte) (n int, err error)
Read()
방법은 바이트 슬라이스를 수신하여 읽은 바이트 수와 가능한 구체적인 오류를 되돌려줍니다. 파일 끝까지 읽으면 0
및 io.EOF
패키지를 되돌려줍니다.예:import (
"fmt"
"io"
"os"
)
func main() {
// main.go
file, err := os.Open("./main.go")
if err != nil {
fmt.Println("open file failed!, err:", err)
return
}
defer file.Close()
//
var content []byte
var tmp = make([]byte, 128)
for {
n, err := file.Read(tmp)
if err == io.EOF {
fmt.Println(" ")
break
}
if err != nil {
fmt.Println("read file failed, err:", err)
return
}
content = append(content, tmp[:n]...)
}
fmt.Println(string(content))
}
bufio 행 읽기
패키지 가져오기
io
가 필요합니다.행별 읽기 예:import (
"bufio"
"fmt"
"io"
"os"
)
func main() {
file, err := os.Open("./main.go")
if err != nil {
fmt.Println("open file failed, err:", err)
return
}
defer file.Close()
// ,
reader := bufio.NewReader(file)
for {
// '
' , '
'
line, err := reader.ReadString('
') //
if err == io.EOF {
if len(line) != 0 {
fmt.Println(line)
}
fmt.Println(" ")
break
}
if err != nil {
fmt.Println("read file failed, err:", err)
return
}
fmt.Print(line)
}
}
예시에서
bufio
패키지의 함수와 방법을 사용했다.bufio
함수 형식:func NewReader(rd io.Reader) *Reader
NewReader()
함수는 기본 크기의 버퍼를 새로 만들어서 파일 내용을 버퍼에 놓고 버퍼 바늘로 돌아갑니다.그 매개 변수는 인터페이스로 파일 바늘을 받을 때 파일 내용을 읽을 수 있다.수신 NewReader()
시 표준 입력에서 읽기 대상을 생성합니다.io.Stdin
메소드 형식:func (b *Reader) ReadString(delim byte) (string, error)
ReadString()
방법은 이 문자를 읽을 때마다 이 문자를 포함하는 문자를 수신합니다.그래서 ReadString()
를 전송할 때 한 번에 한 줄을 읽을 수 있다.그 반환 값은 읽은 문자열과 구체적인 오류입니다.ioutil 전체 파일 한꺼번에 읽기
패키지 가져오기
가 필요합니다.예:import (
"fmt"
"io/ioutil"
)
func main() {
content, err := ioutil.ReadFile("./main.go")
if err != nil {
fmt.Println("read file failed, err:", err)
return
}
fmt.Println(string(content))
}
io/ioutil
함수 형식:func ReadFile(filename string) ([]byte, error)
ReadFile()
함수 수신 파일 경로는 전체 파일을 포함하는 바이트 슬라이스와 구체적인 오류를 되돌려줍니다.파일 쓰기
ReadFile()
함수는 지정한 모드로 파일을 열어 파일 쓰기 기능을 실현할 수 있다.형식:func OpenFile(name string, flag int, perm FileMode) (*File, error)
os.OpenFile()
: 파일 경로name
: const (
// Exactly one of O_RDONLY, O_WRONLY, or O_RDWR must be specified.
O_RDONLY int = syscall.O_RDONLY // open the file read-only.
O_WRONLY int = syscall.O_WRONLY // open the file write-only.
O_RDWR int = syscall.O_RDWR // open the file read-write.
// The remaining values may be or'ed in to control behavior.
O_APPEND int = syscall.O_APPEND // append data to the file when writing.
O_CREATE int = syscall.O_CREAT // create a new file if none exists.
O_EXCL int = syscall.O_EXCL // used with O_CREATE, file must not exist.
O_SYNC int = syscall.O_SYNC // open for synchronous I/O.
O_TRUNC int = syscall.O_TRUNC // truncate regular writable file when opened.
)
flag
: 파일 권한, 8진수 하나.perm
(읽기)04,r
(쓰기)02,w
(실행)01Write 및 WriteString
파일을 직접 작성합니다.
import (
"fmt"
"os"
)
func main() {
file, err := os.OpenFile("t1.txt", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666)
if err != nil {
fmt.Println("open file failed, err:", err)
return
}
defer file.Close()
str := "hello
"
file.Write([]byte(str)) //
file.WriteString("hello ") //
}
x
메소드 형식:func (f *File) Write(b []byte) (n int, err error)
Write()
방법은 바이트 슬라이스를 수신하는데 반환값은 바이트 슬라이스의 길이와 구체적인 오류입니다.Write()
방법:func (f *File) WriteString(s string) (n int, err error) {
return f.Write([]byte(s))
}
WriteString()
함수는 전송된 문자열을 바이트 슬라이스로 변환하고 WriteString()
방법을 호출하여 반환값이 같다는 것을 볼 수 있다.bufio.NewWriter
버퍼에 데이터를 먼저 쓰고 버퍼의 내용을 한 번에 파일에 기록합니다.
import (
"bufio"
"fmt"
"os"
"strconv"
)
func main() {
file, err := os.OpenFile("t1.txt", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666)
if err != nil {
fmt.Println("open file failed, err:", err)
return
}
defer file.Close()
writer := bufio.NewWriter(file)
for i := 0; i < 10; i++ {
writer.WriteString("hello " + strconv.Itoa(i) + "
") //
}
writer.Flush() //
}
Write()
함수 형식:func NewWriter(w io.Writer) *Writer
NewWriter()
함수는 기본 크기의 버퍼를 새로 만들어서 버퍼 포인터를 되돌려줍니다.NewWriter()
메소드 형식:func (b *Writer) WriteString(s string) (int, error)
WriteString()
메서드는 문자열을 수신하여 이미 쓴 바이트 수를 되돌려줍니다. <WriteString()
를 쓰면 구체적인 오류를 되돌려줍니다.len(s)
메서드: 버퍼의 내용을 파일에 기록합니다.ioutil.WriteFile
내용을 파일에 직접 기록합니다.
func main() {
str := `
hello
hello
hello `
err := ioutil.WriteFile("t1.txt", []byte(str), 0666)
if err != nil {
fmt.Println("write file failed, err:", err)
return
}
}
Flush()
함수 형식:func WriteFile(filename string, data []byte, perm os.FileMode) error
기타 파일 작업 방법 / 함수 보충
Seek() 메서드는 파일 읽기 및 쓰기 위치를 설정합니다.
형식:
func (f *File) Seek(offset int64, whence int) (ret int64, err error)
WriteFile()
메서드는 다음 읽기/쓰기 위치를 설정할 수 있습니다.Seek()
는 상대 오프셋이고 offset
는 상대 위치를 결정합니다. 0은 상대 파일로 시작하고 1은 상대 현재 위치, 2는 상대 파일로 끝납니다.새 오프셋 (상대적으로 시작) 과 가능한 오류를 되돌려줍니다.Rename() 함수 파일 이름 바꾸기
참고: 사용하기 전에 파일을 닫아야 합니다.형식:
func Rename(oldpath, newpath string) error
예:
os.Rename("./t1.txt", "./t2.txt")
예제에서는 파일 이름
whence
을 t1.txt
으로 변경하고 이름을 바꾸는 과정에서 t2.txt
을 사용하여 파일 위치를 이동할 수 있습니다.Remove() 함수 파일 / 디렉토리 삭제
참고: 사용하기 전에 파일을 닫아야 합니다.형식:
func Remove(name string) error
newpath
함수는 Remove()
지정한 파일이나 디렉터리를 삭제할 수 있습니다.오류가 발생하면 기본 유형의 오류가 반환됩니다.중국어 패키지 문서 참조를 위한 추가 함수/방법
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
gin과 firestore 연동하기왜 두개를 연결하게 되었나요 클론 프로젝트를 진행하게 되면서 백단은 golang을 이용한 gin으로 restful을 활용하기로 정했는데, 역시 여러명이 하는거다보니 db를 무엇으로할지 고민이 되었다 rdbms는 익숙...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.