Go 임시 파일 처리 시 읽기 문제 해결
Go에서는 임시 파일에 쓴 후 즉시 해당 파일의 데이터에 액세스하는 것이 문제가 될 수 있습니다. 차단하다. 다음은 문제와 해결책에 대한 자세한 분석입니다.
문제:
Go의 ioutil.TempFile은 임시 파일을 생성하여 읽고 쓰기 위해 엽니다. 이 파일에 데이터를 성공적으로 쓸 수 있지만 후속 읽기 작업은 실패합니다. 이는 파일 설명자가 쓰기 후에 파일의 끝을 가리키기 때문입니다.
해결 방법:
이 문제를 해결하려면 파일 설명자를 다음 위치로 다시 이동해야 합니다. 파일을 읽으려고 시도하기 전에 파일의 시작 부분. 이는 *os.File의 Seek 메서드를 사용하여 수행할 수 있습니다. 읽기 작업 전에 tmpFile.Seek(0, 0)을 추가하면 파일 포인터가 파일의 시작 부분으로 재설정됩니다.
코드 예:
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) } defer tmpFile.Close() fmt.Println("Created temp file: ", tmpFile.Name()) 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") // Seek the pointer to the beginning tmpFile.Seek(0, 0) s := bufio.NewScanner(tmpFile) for s.Scan() { fmt.Println(s.Text()) } if err = s.Err(); err != nil { log.Fatal("error reading temp file", err) } }
추가 고려 사항:
위 내용은 쓰기 직후 Go 임시 파일 읽기가 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!