Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Golang 判断是否为 zip 文件

Golang 判断是否为 zip 文件

作者头像
恋喵大鲤鱼
发布于 2022-12-18 09:36:25
发布于 2022-12-18 09:36:25
1.4K00
代码可运行
举报
文章被收录于专栏:C/C++基础C/C++基础
运行总次数:0
代码可运行

文章目录

1.压缩文件格式

压缩文件格式多如牛毛,但常见的有 4 种。

  • ZIP

ZIP 是一个历史悠久的压缩格式,也是事实上的压缩文件格式标准。

ZIP 是一个开放的压缩文件格式,所有任何压缩软件都可以创建 ZIP 文件。

ZIP 由 Phil Katz 于 1989 年设计,所以在文件头中我们可以看到 PK 的字样,这就是 Phil Katz 大名的首字母缩写。

  • GZ

GZ 名为 GNU ZIP,是一种类 UNIX 平台流行的压缩文件格式。

GZ 由 gzip 软件实现。gzip 是由 Jean-loup Gailly 和 Mark Adler 开发并于 1992 发布的一个自由软件,起初目的是用于取代 UNIX 系统上的压缩软件,并被 GNU 使用。

GZ 一般和 tar 配合使用,先将文件打包后再将其压缩。

  • RAR

RAR 是一种专利压缩文件格式,用于数据压缩与归档打包。

RAR 由俄罗斯人 Eugene Roshal 于 1993 年设计。RAR 的全称为 “Roshal ARchive”,中文意为“罗谢尔的归档”。

RAR 相比于 ZIP 有着更高的压缩比,但也存在着压缩和解压速度较慢的特点。

  • 7Z

7Z 是一种压缩文件格式,支持多种不同的数据压缩、加密和预处理算法。

7Z 格式最初是由 7-Zip 软件实现。7-Zip 由 Igor Pavlov 开发并于 1999 年基于 GNU LGPL 协议免费开源发布。

7Z 不仅比 ZIP 压缩比更高,而且相对于 RAR,占用更少的系统资源。

2.判断是否 ZIP 文件

判断一个文件是否是 ZIP 文件,可以根据 ZIP 开头的特殊表示来判断。

ZIP 文件开头的四个字节为文件头的签名 0x50 0x4b 0x03 0x04。其中 0x504b 即 PK,让我们永远记住 ZIP 之父 Phil Katz。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// IsZipFile reports file whether is a zip file.
func IsZipFile(filepath string) (bool, error) {
	f, err := os.Open(filepath)
	if err != nil {
		return false, err
	}
	defer f.Close()

	buf := make([]byte, 4)
	n, err := f.Read(buf)
	if err != nil {
		return false, err
	}
	if n < 4 {
		return false, nil
	}
	return bytes.Equal(buf, []byte("PK\x03\x04"))
}

3.go-huge-util

为了方便大家使用,以上相关代码已开源至 Github 工具库 go-huge-util,大家可使用 go mod 方式 import 然后使用。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import (
    "github.com/dablelv/go-huge-util/zip"
)

func main() {
	fmt.Println(zip.IsZipFile("a.zip"))
	fmt.Println(zip.IsZipFile("a.txt"))
	fmt.Println(zip.IsZipFile("b.txt"))
}

其中 a.zip 为事先准备好的 ZIP 文件,a.txt 为文本文件,b.txt 不存在。

运行输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
true <nil>
false <nil>
false open b.txt: The system cannot find the file specified.

参考文献

ZIP (file format) - Wikipedia Phil Katz - Wikipedia RAR (file format) - Wikipedia Eugene Roshal - Wikipedia 7z - Wikipedia 7-Zip - Wikipedia Igor Pavlov - Wikipedia Gzip - Wikipedia ZIP - File Format Docs github.com/dablelv/go-huge-util How can I determine if a file is a zip file? - Stack Overflow

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-12-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
玩转服务器—Linux文件压缩与解压一览表
想必大家都对 ZIP 文件并不陌生。它因其广泛的兼容性和易用性,成为 Windows 和 macOS 默认的压缩格式。压缩与解压的操作,大家都再熟悉不过,在 Linux 系统中,当然也提供了多种压缩工具。正因如此,不同格式的选择和使用常常让人感到困惑。下面让我们来一起梳理一下。
生信菜鸟团
2024/12/25
1900
玩转服务器—Linux文件压缩与解压一览表
Golang zip 压缩与解压
Go 和许多其他编程语言一样,支持从标准库中直接进行 zip 文件的压缩和解压。在本文中,我们将介绍如何在 Go 中利用标准库包 archive/zip 完成 zip 文件的创建和提取。
恋喵大鲤鱼
2022/05/09
4.5K0
【Android 安装包优化】7z 文件压缩格式 ( 7z 格式简介 | 7z 命令使用说明 )
7z 文件压缩格式 , 压缩比很高 , 压缩时可以选择多种压缩算法 , 该算法比 zip , tar , rar 等压缩格式的压缩比率更高 , 得到的压缩后的文件最小 ;
韩曙亮
2023/03/29
2.8K0
【Android 安装包优化】7z 文件压缩格式  ( 7z 格式简介 | 7z 命令使用说明 )
python暴力破解压缩包密码(python暴力破解zip压缩包)
简介: ZIP文件格式是一种数据压缩和文档储存的文件格式,原名Deflate,发明者为菲尔·卡茨(Phil Katz),他于1989年1月公布了该格式的资料。ZIP通常使用后缀名“.zip”,它的MIME格式为application/zip。当前,ZIP格式属于几种主流的压缩格式之一,其竞争者包括RAR格式以及开放源码的7z格式。从性能上比较,RAR及7z格式较ZIP格式压缩率较高,而7-Zip由于提供了免费的压缩工具而逐渐在更多的领域得到应用。Microsoft从Windows ME操作系统开始内置对zip格式的支持,即使用户的计算机上没有安装解压缩软件,也能打开和制作zip格式的压缩文件,OS X和流行的Linux操作系统也对zip格式提供了类似的支持。因此如果在网络上传播和分发文件,zip格式往往是最常用的选择。
GeekLiHua
2025/01/21
2470
python暴力破解压缩包密码(python暴力破解zip压缩包)
Linux文件归档,压缩与解压缩
这样,所有/root/test下面的文件都变成了*.gz,目录依然存在只是目录里面的文件相应变成了*.gz.这就是压缩,和打包不同。因为是对目录操作,所以需要加上-r选项,这样也可以对子目录进行递归了。
用户2283744
2020/06/12
9.7K0
Linux文件归档,压缩与解压缩
Golang 递归获取目录下所有文件
标准库 io/ioutil 包提供了一个函数 ReadDir() 可以获取指定目录下的所有内容,按文件名排序,返回 []fs.FileInfo 切片来描述目录中的所有内容。
恋喵大鲤鱼
2022/12/02
3.3K0
Golang 按行读取文件的三种方法
Golang 中有一个 bufio 包,它提供了 Scanner 类型,可以方便地按行读取文件。我们可以使用 Scanner 的 Scan() 方法来读取每一行。
恋喵大鲤鱼
2023/04/30
9.8K0
【Android 安装包优化】Android 中使用 7zr 可执行程序 解压缩文件
在上一篇博客 【Android 安装包优化】Android 中使用 7zr 可执行程序压缩文件 中 , 将 /data/user/0/kim.hsl.a7_zip/files 目录压缩存放到 /data/user/0/kim.hsl.a7_zip/files/files.7z 文件中 ;
韩曙亮
2023/03/29
7760
【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( 测试 lib7zr.so 动态库调用 )
在上一篇博客 【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( 拷贝 lib7zr.so 动态库头文件到 Android 工程中 | 配置 CMakeLists.txt 构建脚本 ) 中 , 将 lib7zr.so 动态库需要的头文件都拷贝到了 Android Studio 工程中 , 并配置了 CMakeLists.txt 构建脚本 ;
韩曙亮
2023/03/29
6820
【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( 测试 lib7zr.so 动态库调用 )
7-Zip(24.2)解压缩软件美化版
7-Zip是一款开源免费的号称有着现今最高压缩比的压缩软件,它不仅支持独有的7z文件格式,而且还支持各种其它压缩文件格式,其中包括ZIP, RAR, CAB, GZIP, BZIP2和TAR等等。此软件压缩的压缩比要比普通ZIP文件高30-50%,因此,它可以把Zip格式的文件再压缩2-10%。
科控物联
2024/05/02
2940
7-Zip(24.2)解压缩软件美化版
开源的文件压缩和解压缩软件7-Zip
7-Zip是一款开源的文件压缩和解压缩软件,它支持多种压缩格式,包括自有的7z格式以及常见的ZIP、RAR、TAR等格式。下面是对7-Zip的详细介绍,包括其功能特点、使用方法、优缺点等方面的内容。官网:7-Zip
正在走向自律
2024/12/18
3560
开源的文件压缩和解压缩软件7-Zip
解析 ZIP 文件结构-CTF
在网络安全领域的夺旗赛(Capture The Flag,CTF)中,对各种文件格式的深入理解和分析常常是解题的关键。其中,ZIP 文件作为一种常见的压缩格式,其结构蕴含着许多可以被利用的信息和技巧。
井九
2024/10/12
5280
>>技术应用:CentOS(Linux)的解压工具7za
看到这个第一眼,不知道怎么处理了,最后运维告知需要使用7za工具处理。为了巩固自己所学,下面开始研究下这个软件工具。
艾特
2023/10/10
6370
Linux常用打包压缩命令
简介 Linux 上常用的压缩/解压工具,介绍了zip、rar、tar的使用。 文件打包和压缩 Linux 上的压缩包文件格式,除了 Windows 最常见的*.zip、*.rar、.7z 后缀的压缩文件,还有 .gz、.xz、.bz2、.tar、.tar.gz、.tar.xz、tar.bz2
全栈程序员站长
2022/08/23
22.7K0
【Linux】学习笔记(七) Linux 文件打包解压
常用压缩文件格式 文件后缀名 说明 *.zip zip 程序打包压缩的文件 *.rar rar 程序压缩的文件 *.7z 7zip 程序压缩的文件 *.tar tar 程序打包,未压缩的文件 *.gz gzip 程序(GNU zip)压缩的文件 *.xz xz 程序压缩的文件 *.bz2 bzip2 程序压缩的文件 *.tar.gz tar 打包,gzip 程序压缩的文件 *.tar.xz tar 打包,xz 程序压缩的文件 *tar.bz2 tar 打包,bzip2 程序压缩的文件 *.tar.7z ta
韩旭051
2020/06/24
2.3K0
Linux系列教程(八)——Linux常用命令之压缩和解压缩命令
本篇博客介绍了如何在Linux系统中使用压缩和解压缩命令,将文件或目录压缩为gzip、tar、zip和bzip2格式,并介绍了如何使用这些命令进行文件或目录的压缩和解压操作。
IT可乐
2018/01/04
1.2K0
Linux系列教程(八)——Linux常用命令之压缩和解压缩命令
利用Python进行文件的自动备份(第二版)
# 利用python进行文件的自动备份(第二版) # 代码 import os import time ''' 第二版是第一版的改进, 启用一种更好的文件命名机制——使用时间作为文件名,存储在以当前时间为名字的文件夹中,这一文件夹则照常存储在主备份目录下。 ''' # 例如在 Windows 下: source = [r'E:\aaa.txt'] # 在这里要注意到我们必须在字符串中使用双引号 # 用以括起其中包含空格的名称。 # 2. 备份文件必须存储在一个 # 主备份目录中 # 例如在 Windo
benym
2022/07/14
4600
RAR Extractor - ZIP Unarchiver for Mac(rar压缩解压工具)
RAR Extractor是Mac上的一款解压缩软件,支持40多种压缩包的格式,给客户多种选择,并且RAR Extractor可以加密的功能,为您的重要文件保驾护航。
用户10121095
2023/03/16
1.1K0
电脑版压缩软件7-Zip v23.01 官方 单文件绿色版
7-Zip – 流行的免费开源压缩软件。7-Zip是一款老牌拥有极高压缩算法的免费开源压缩文件管理器,提供命令行接口和图形界面操作,支持独立的7z格式及近乎所有压缩格式,包括ZIP, RAR, ISO, CAB, GZIP, BZIP2, TAR等。其多线程LZMA压缩比要比普通ZIP文件高达30-50%,它可以把ZIP格式的文件再压缩2-10%。 软件特点 开源免费,界面简洁,功能强大; AES-256加密算法让你的文件更安全; 压缩速度快、压缩率比同类软件好; 众多主流压缩解压格式任你选: 支持对7z, XZ, BZIP2, GZIP, TAR, ZIP and WIM等格式的压缩/解压缩! 仅解压缩:ARJ, CAB, CHM, CPIO, CramFS, DEB, DMG, FAT, HFS, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, RAR, RPM, SquashFS, UDF, VHD, WIM, XAR, Z
半夜喝可乐
2024/09/30
1950
电脑版压缩软件7-Zip v23.01 官方 单文件绿色版
为抵制 7-Zip,列出 “三宗罪” ?网友:“第3个才是重点吧?”
整理 | 郑丽媛、出品 | CSDN(ID:CSDNnews) 谈及电脑必装软件有哪些时,压缩软件绝对算一个。由于各人需求不同,其选择的压缩软件也不尽相同,如 WinRAR、360 压缩、7-Zip、BandiZip、快压等,其中完全免费且开源的 7-Zip 就深受许多用户青睐。 作为一款开源压缩软件,7-Zip 发布于 1999 年,大多数源代码都基于 GNU LGPL 许可协议下发布,使用了 LZMA 与 LZMA2 算法使其拥有极高的压缩比,小巧的体积也是一大优势。 (图片来自7-Zip中文官网)
程序猿DD
2022/07/04
4460
为抵制 7-Zip,列出 “三宗罪” ?网友:“第3个才是重点吧?”
推荐阅读
相关推荐
玩转服务器—Linux文件压缩与解压一览表
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验