Skip to content

0x045-golang重置文件指针

file.Seek(0, io.SeekStart)

go
package main

import (
	"bytes"
	"encoding/csv"
	"fmt"
	"io"
	"mime/multipart"
	"os"
)

func processFile(file multipart.File) error {
	// 先读取文件内容
	data, err := io.ReadAll(file)
	if err != nil {
		return err
	}

	// 如果我们希望使用 csv.Reader,先重置文件指针
	file.Seek(0, io.SeekStart) // 将指针重新移动到开头

	// 然后可以用 csv.NewReader 读取
	reader := csv.NewReader(file)
	records, err := reader.ReadAll()
	if err != nil {
		return err
	}

	for _, record := range records {
		fmt.Println(record)
	}

	return nil
}

// 这里是一个示例,实际场景中 file 是来自 HTTP 请求的 multipart.File
func main() {
	file, err := os.Open("example.csv") // Replace with actual file from multipart
	if err != nil {
		panic(err)
	}
	defer file.Close()

	err = processFile(file)
	if err != nil {
		panic(err)
	}
}
package main

import (
	"bytes"
	"encoding/csv"
	"fmt"
	"io"
	"mime/multipart"
	"os"
)

func processFile(file multipart.File) error {
	// 先读取文件内容
	data, err := io.ReadAll(file)
	if err != nil {
		return err
	}

	// 如果我们希望使用 csv.Reader,先重置文件指针
	file.Seek(0, io.SeekStart) // 将指针重新移动到开头

	// 然后可以用 csv.NewReader 读取
	reader := csv.NewReader(file)
	records, err := reader.ReadAll()
	if err != nil {
		return err
	}

	for _, record := range records {
		fmt.Println(record)
	}

	return nil
}

// 这里是一个示例,实际场景中 file 是来自 HTTP 请求的 multipart.File
func main() {
	file, err := os.Open("example.csv") // Replace with actual file from multipart
	if err != nil {
		panic(err)
	}
	defer file.Close()

	err = processFile(file)
	if err != nil {
		panic(err)
	}
}