zip存档中文件和目录的名称来自zip.FileHeader。
您的代码已经初始化了os.FileInfo的标头。这很重要,因为它会填充诸如时间戳和未压缩大小的元数据。
此外,您的代码似乎正在执行以下操作:
如果通过以下方式调用:
Zipit("/path/to/folder2/", "/path/to/folder1.zip")在遍历目录树之前,它将计算基本目录:
baseDir = filepath.base(source)// baseDir is "folder2"
然后,对于每个文件,存档内的路径设置为:
header.Name = filepath.Join(baseDir, strings.TrimPrefix(path, source))
这样会将文件名
/path/to/folder2/otherdir/myfile转换为
folder2/otherdir/myfile。
如果要更改存储在存档中的目录名称,只需更改
baseDir为所需的名称。
我建议以下解决方案:
将功能签名更改为:
func Zipit(source, target, newbaseName string) error {将basedir更改为:
if newbaseName != "" { baseDir = newbaseNameelse if info.IsDir() { baseDir = filepath.base(source)}然后使用以下命令调用函数:
Zipit("/path/to/folder2/", "/path/to/folder1.zip", "folder1")这应导致将存档解压缩到中
folder1/。



