Go에서 임시 파일에 기록된 데이터 읽기
Go에서는 임시 파일을 만들고 읽는 것이 어려울 수 있습니다. 다음과 같은 단순화된 테스트 코드를 고려하십시오.
package main import ( "bufio" "fmt" "io/ioutil" "log" "os" "path/filepath" ) func main() { tmpFile, err := ioutil.TempFile("", fmt.Sprintf("%s-", filepath.Base(os.Args[0]))) if err != nil { log.Fatal("Could not create temporary file", err) } fmt.Println("Created temp file:", tmpFile.Name()) defer tmpFile.Close() fmt.Println("Writing some data to the temp file") if _, err = tmpFile.WriteString("test data"); err != nil { log.Fatal("Unable to write to temporary file", err) } else { fmt.Println("Data should have been written") } fmt.Println("Trying to read the temp file now") s := bufio.NewScanner(tmpFile) for s.Scan() { fmt.Println(s.Text()) } err = s.Err() if err != nil { log.Fatal("error reading temp file", err) } }
코드가 임시 파일을 올바르게 생성하고 쓰는 동안 결과를 읽으려고 하면 빈 출력이 표시됩니다. 이는 쓰기 작업이 포인터를 파일 끝으로 이동하기 때문입니다. 데이터를 읽으려면 처음부터 다시 찾아야 합니다.
해결책:
이 문제를 해결하려면 tmpFile.Seek(0, 0)을 추가하여 이동하세요. 읽기를 시도하기 전에 파일의 시작 부분으로 포인터를 되돌립니다.
tmpFile.Seek(0, 0) s := bufio.NewScanner(tmpFile) for s.Scan() { fmt.Println(s.Text()) }
이 수정을 통해 코드는 데이터를 올바르게 읽고 인쇄합니다. 적절한 리소스 관리를 위해 종료하기 전에 defer tmpFile.Close()를 사용하여 파일을 닫는 것을 잊지 마세요.
위 내용은 Go에서 임시 파일에 기록된 데이터를 읽는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!