루트 폴더를 제외한 폴더의 콘텐츠 압축
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!