1
압축을 푼 tar.gz의 내용을 go lang의 단일 파일로 복사하려고합니다. 파일 안에는 텍스트 만 있습니다.추출 된 tar.gz를 하나의 파일에 복사
다음은 현재 코드입니다.
f, err := os.Open(fullpath)
if err != nil {
log.Panicf("Can not open file %s: %v", fullpath, err)
return ""
}
defer f.Close()
reader, err := gzip.NewReader(f)
if err != nil{
log.Panicf("Cannot read gzip archive %v", err);
return ""
}
defer reader.Close()
tar_reader := tar.NewReader(reader)
var files []io.Reader
for{
header, err := tar_reader.Next()
if err == io.EOF {
break
} else if err != nil {
log.Panicf("Cannot read file inside tarball %v", err);
return 0, err
} else {
log.Println("Parsing file : ", header.Name)
files = append(files, tar_reader)
}
}
reader = io.MultiReader(files...)
writer, err := os.Create(target)
if err != nil {
log.Panicf("Cannot write unarchived file %v", err);
return 0, err
}
defer writer.Close()
result,err := io.Copy(writer, reader)
if(err != nil) {
log.Panicf("Cannot write unarchived file %v", err);
}
return result,err
위의 코드에 오류가 없는데도 파일을 읽을 수 없습니다. 출력에는 데이터가 없습니다. 내가 잘못 가고있는 곳을 지적 해주세요.
고마워요.하지만 모든 tar_readers를 단일 멀티ireader에 추가하고 싶습니다. 그게 가능하니? – PiKaY
@PiKaY : 아니요, tar.Reader가 하나뿐이기 때문입니다. MultiReader를 사용하려면 모든 파일을 개별 버퍼에 복사하여 별도의 io.Reader를 만들어야합니다. 이것은 당신이 원하는 것을 정확히하고 있지만 여분의 복사본은 없습니다. – JimB
감사합니다. @JimB 현재 코드 구성으로 인해 약간의 제약이있었습니다. 나는 이것에 맞을 수 있다고 생각한다. :) 답변 감사합니다 – PiKaY