Skip to content

learningA

Doifo edited this page Aug 4, 2023 · 1 revision

文件读写

// 获取文件夹下文件
files, err = os.ReadDir(path)

// 文件是否是目录
file.IsDir()

// 拆分目录名与文件名
path.Split(string)

// 打开文件
file, err := os.Open(filename)
file, err := os.OpenFile(filename, mode, perm)

// 关闭文件
file.Close()

// 拷贝文件
io.Copy(target, source)

// 读取文件
bytes, err := os.ReadFile(f)

// 写入文件
err = os.WriteFile(destName, bytes, 0644)

// 分片读取
n, err := src.Read(slice)

// 分片写入
dst.Write(slice)

// bufio 按行读取
reader := bufio.NewReader(src)
line, err := reader.ReadString('\n')

样例代码

func getFiles(dir string) []string {
	fs, err := os.ReadDir(dir)
	list := make([]string, 0)

	if err != nil {
		return list
	}

	for _, f := range fs {
		if f.IsDir() {
			continue
		}
		list = append(list, strings.Trim(dir, "/")+"/"+f.Name())
	}

	return list
}

// CopyFile 拷贝文件
func CopyFile(srcName, destName string) {
	src, err := os.Open(srcName)
	if err != nil {
		return
	}
	defer src.Close()

	dest, err := os.OpenFile(destName, os.O_CREATE|os.O_WRONLY, 0664)
	if err != nil {
		return
	}
	defer dest.Close()
	io.Copy(dest, src)
}

// ReadWriteFile 一次性读写
func ReadWriteFile(filename string) {
	bytes, err := os.ReadFile(filename)
	if err != nil {
		return
	}
	_, name := path.Split(filename)
	destName := destDir + "/" + name
	err = os.WriteFile(destName, bytes, 0644)
	if err != nil {
		return
	}
}

// OneSideReadWriteFile 分片读写
func OneSideReadWriteFile(srcName, destName string) {
	src, err := os.Open(srcName)
	if err != nil {
		return
	}
	defer src.Close()

	dest, err := os.OpenFile(destName, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0664)
	if err != nil {
		return
	}
	defer dest.Close()

	buf := make([]byte, 1024)
	for {
		n, err := src.Read(buf)
		if err != nil && err != io.EOF {
			continue
		}
		if n == 0 {
			break
		}
		dest.Write(buf[:n])
	}
}

// Line 通过bufio按行读取
func ReadLine(srcName string) {
	src, err := os.Open(srcName)
	if err != nil {
		return
	}
	defer src.Close()
	reader := bufio.NewReader(src)

	for {
		line, err := reader.ReadString('\n')
		if err == io.EOF {
			break
		}
		print(line)
	}
}
Clone this wiki locally