>  기사  >  백엔드 개발  >  루트 폴더를 포함하지 않고 Go에서 폴더 콘텐츠를 압축하는 방법은 무엇입니까?

루트 폴더를 포함하지 않고 Go에서 폴더 콘텐츠를 압축하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-17 21:46:01692검색

How to Zip Folder Content in Go Without Including the Root Folder?

루트 폴더를 제외한 폴더의 콘텐츠 압축

Go에서는 zip을 사용하여 루트 폴더를 제외하고 디렉터리 내의 콘텐츠를 압축할 수 있습니다. .Writer.

문제 설명

원본 코드는 디렉터리("dir1")의 내용을 "dir1.zip"으로 압축하는 것을 목표로 합니다. 그러나 추출 시 압축된 파일은 "dir1" 폴더 구조를 루트로 유지합니다. 목표는 추출 시 루트 폴더를 제거하는 것입니다.

해결책

이를 달성하려면 zip.Writer 내의 header.Name 필드를 수정해야 합니다. 이 필드는 아카이브 내의 파일 이름을 결정합니다. 원본 코드에서 필드는 다음과 같이 설정됩니다.

if baseDir != "" {
    header.Name = filepath.Join(baseDir, strings.TrimPrefix(path, source))
}

이 코드는 파일 이름에 baseDir("dir1")과 소스 디렉터리에 대한 상대 파일 경로("path/dir1")가 포함되도록 합니다. ). 그러나 추출 후 루트 폴더를 제거하려면 baseDir:

header.Name = strings.TrimPrefix(path, source)

을 생략해야 합니다.

이 수정을 사용하면 압축된 파일이 아카이브 루트 바로 아래에 있게 되며 " dir1" 폴더를 루트로 사용합니다.

결과

header.Name 필드에서 baseDir을 생략하면 "dir1" 디렉토리의 내용이 압축됩니다. 루트 폴더 없이 "dir1.zip"에 넣습니다. 이를 통해 사용자는 "dir1" 폴더를 탐색할 필요 없이 직접 파일을 추출할 수 있습니다.

위 내용은 루트 폴더를 포함하지 않고 Go에서 폴더 콘텐츠를 압축하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.