golang 기본 메모(18) - 파일 조작: 파일 스위치, 간단한 읽기와 쓰기 실례, 파일 읽기와 쓰기 위치 설정, 파일 삭제, 파일 이름 바꾸기

파일 열기 및 닫기

os 패키지의 Open() 함수는 파일을 읽기 전용으로 열 수 있으며, 함수는 *Fileerr 으로 되돌아옵니다.열린 파일은 호출 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() 방법은 바이트 슬라이스를 수신하여 읽은 바이트 수와 가능한 구체적인 오류를 되돌려줍니다. 파일 끝까지 읽으면 0io.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(실행)01
  • Write 및 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")
    

    예제에서는 파일 이름 whencet1.txt 으로 변경하고 이름을 바꾸는 과정에서 t2.txt 을 사용하여 파일 위치를 이동할 수 있습니다.

    Remove() 함수 파일 / 디렉토리 삭제


    참고: 사용하기 전에 파일을 닫아야 합니다.형식:
    func Remove(name string) error
    
    newpath 함수는 Remove() 지정한 파일이나 디렉터리를 삭제할 수 있습니다.오류가 발생하면 기본 유형의 오류가 반환됩니다.중국어 패키지 문서 참조를 위한 추가 함수/방법

    좋은 웹페이지 즐겨찾기