Golang使用archive/zip包如何排除子文件夹内容?
解决Golang archive/zip包只获取压缩包根目录内容的问题
archive/zip包本身没有内置的过滤子目录内容的功能,需要你自行处理文件路径来实现需求。
核心思路是通过判断文件的名称是否包含路径分隔符(/)来区分根目录内容和子目录内容:
- 根目录的文件夹名称以
/结尾,但不会包含其他路径分隔符 - 根目录的文件名称不会包含任何路径分隔符
- 子目录中的文件/文件夹名称会包含至少一个
/
修改后的完整代码如下:
import ( "archive/zip" "fmt" "log" "strings" ) func main() { // Open a zip archive for reading. r, err := zip.OpenReader("e:\\demo.zip") if err != nil { log.Fatal(err) } defer r.Close() for _, f := range r.File { if f.FileInfo().IsDir() { // 保留根目录的文件夹 fmt.Println(f.Name, "folder") } else { // 仅打印根目录的文件(名称中不含路径分隔符) if !strings.Contains(f.Name, "/") { fmt.Println(f.Name, "file") } } } }
这段代码会过滤掉所有位于子目录中的文件,只保留根目录的文件夹和文件,完全匹配你期望的输出结果。
内容的提问来源于stack exchange,提问作者zeronofreya
相关产品推荐
相关产品推荐

