【C#生态园】C#文件压缩库全面比较:选择最适合你的库
从核心功能到API概览:深度解析六大C#文件压缩库
前言
在软件开发过程中,文件的压缩和解压缩是一个常见的需求。针对C#开发者而言,选择合适的文件压缩库可以极大地简化开发工作。本文将介绍几个常用的C#文件压缩库,包括其核心功能、使用场景、安装与配置以及API概览,旨在帮助开发者根据实际需求选择最适合的库进行开发。
欢迎订阅专栏:C#生态园
文章目录
- 从核心功能到API概览:深度解析六大C#文件压缩库
- 前言
- 1. SharpZipLib:一个用于C#的文件压缩库
- 1.1 简介
- 1.1.1 核心功能
- 1.1.2 使用场景
- 1.2 安装与配置
- 1.2.1 安装指导
- 1.2.2 基本配置
- 1.3 API 概览
- 1.3.1 文件压缩
- 1.3.2 文件解压缩
- 2. DotNetZip:一个用于C#的文件压缩库
- 2.1 简介
- 2.1.1 核心功能
- 2.1.2 使用场景
- 2.2 安装与配置
- 2.2.1 安装指导
- 2.2.2 基本配置
- 2.3 API 概览
- 2.3.1 文件压缩
- 2.3.2 文件解压缩
- 3. Ionic.Zip:提供在C#中创建、读取和修改ZIP文件的功能
- 3.1 简介
- 3.1.1 核心功能
- 3.1.2 使用场景
- 3.2 安装与配置
- 3.2.1 安装指导
- 3.2.2 基本配置
- 3.3 API 概览
- 3.3.1 ZIP文件创建
- 3.3.2 ZIP文件读取
- 4. SharpCompress:支持多种压缩格式的C#库
- 4.1 简介
- 4.1.1 核心功能
- 4.1.2 使用场景
- 4.2 安装与配置
- 4.2.1 安装指导
- 4.2.2 基本配置
- 4.3 API 概览
- 4.3.1 压缩格式支持
- 4.3.2 数据解压
- 5. SevenZipSharp:对7-Zip进行封装提供C#接口
- 5.1 简介
- 5.1.1 核心功能
- 5.1.2 使用场景
- 5.2 安装与配置
- 5.2.1 安装指导
- 5.2.2 基本配置
- 5.3 API 概览
- 5.3.1 7-Zip操作
- 文件压缩示例
- 文件解压示例
- 5.3.2 压缩级别设置
- 6. SharpArchiver:用于C#的通用归档处理库
- 6.1 简介
- 6.1.1 核心功能
- 6.1.2 使用场景
- 6.2 安装与配置
- 6.2.1 安装指导
- 6.2.2 基本配置
- 6.3 API 概览
- 6.3.1 归档创建
- 6.3.2 归档解压
- 总结
1. SharpZipLib:一个用于C#的文件压缩库
SharpZipLib是一个流行的开源压缩库,它提供了在C#中进行文件压缩和解压缩的功能。在本文中,我们将介绍SharpZipLib的简介、安装与配置以及API概览。
1.1 简介
1.1.1 核心功能
SharpZipLib主要包括对文件的压缩和解压缩功能,能够处理多种压缩格式,如ZIP、GZip等,并提供了对压缩文件进行操作的功能。
1.1.2 使用场景
- 在C#应用程序中进行文件的压缩和解压缩操作。
- 处理需要发送或存储的大量文件,并希望通过压缩来节省空间和传输时间。
1.2 安装与配置
1.2.1 安装指导
你可以通过NuGet包管理器来安装SharpZipLib。在Visual Studio中打开NuGet包管理器控制台,运行以下命令来安装SharpZipLib:
Install-Package SharpZipLib
1.2.2 基本配置
安装完成后,你可以在项目中引用ICSharpCode.SharpZipLib
命名空间来开始使用SharpZipLib库。
1.3 API 概览
1.3.1 文件压缩
使用SharpZipLib进行文件压缩非常简单。以下是一个简单的示例,演示了如何使用SharpZipLib来压缩文件夹:
using ICSharpCode.SharpZipLib.Zip;
using System.IO;public class ZipHelper
{public void CreateZipFile(string sourceDirectory, string zipFilePath){using (ZipOutputStream zipStream = new ZipOutputStream(File.Create(zipFilePath))){AddFolderToZip(sourceDirectory, zipStream, "");}}private void AddFolderToZip(string absolutePath, ZipOutputStream zipStream, string relativePath){string[] files = Directory.GetFiles(absolutePath);foreach (string file in files){FileInfo fileInfo = new FileInfo(file);using (FileStream fileStream = File.OpenRead(file)){byte[] buffer = new byte[fileStream.Length];fileStream.Read(buffer, 0, buffer.Length);ZipEntry entry = new ZipEntry(Path.Combine(relativePath, fileInfo.Name));zipStream.PutNextEntry(entry);zipStream.Write(buffer, 0, buffer.Length);}}string[] folders = Directory.GetDirectories(absolutePath);foreach (string folder in folders){AddFolderToZip(folder, zipStream, Path.Combine(relativePath, new DirectoryInfo(folder).Name));}}
}
以上代码创建了一个名为ZipHelper
的类,其中的CreateZipFile
方法接受一个源文件夹路径和一个目标ZIP文件路径,并将文件夹内容压缩成ZIP文件。
参考链接:SharpZipLib GitHub
1.3.2 文件解压缩
下面是一个简单的示例演示了如何使用SharpZipLib对文件进行解压缩:
using ICSharpCode.SharpZipLib.Zip;public class UnzipHelper
{public void DecompressFile(string compressedFile, string destinationFolder){using (var fileStreamIn = new FileStream(compressedFile, FileMode.Open, FileAccess.Read))using (var zipStream = new ZipInputStream(fileStreamIn)){ZipEntry entry;while ((entry = zipStream.GetNextEntry()) != null){if (!entry.IsFile) continue;string fullZipToPath = Path.Combine(destinationFolder, entry.Name);string directoryName = Path.GetDirectoryName(fullZipToPath);if (directoryName.Length > 0)Directory.CreateDirectory(directoryName);using (FileStream streamWriter = File.Create(fullZipToPath)){int size;byte[] data = new byte[2048];while (true){size = zipStream.Read(data, 0, data.Length);if (size > 0)streamWriter.Write(data, 0, size);elsebreak;}}}}}
}
官网链接:SharpZipLib - GitHub
以上是一些关于SharpZipLib库的基本介绍和使用方法,在实际项目中,你可以根据需求灵活运用其丰富的功能来进行文件压缩和解压缩操作。
2. DotNetZip:一个用于C#的文件压缩库
DotNetZip是一个开源的C#文件压缩库,可以帮助开发人员在他们的应用程序中创建和管理压缩文件。本文将介绍DotNetZip库的简介、安装与配置以及API概览。
2.1 简介
2.1.1 核心功能
DotNetZip提供了丰富的文件压缩和解压缩功能,包括创建ZIP文件、向ZIP文件添加文件、从ZIP文件提取文件等。此外,它还支持密码保护、自定义压缩级别和多种压缩格式。
2.1.2 使用场景
DotNetZip可用于开发人员需要在其C#应用程序中对文件进行压缩和解压缩的场景,如备份数据、打包文件、减小文件传输大小等。
2.2 安装与配置
2.2.1 安装指导
您可以通过NuGet包管理器来安装DotNetZip库。在Visual Studio中打开包管理器控制台,并运行以下命令:
Install-Package DotNetZip
这将会自动下载并安装最新版本的DotNetZip库。
2.2.2 基本配置
安装完成后,您只需在项目中引入using Ionic.Zip;
即可开始使用DotNetZip库的功能。
2.3 API 概览
2.3.1 文件压缩
使用DotNetZip库可以非常方便地进行文件压缩。以下是一个简单的示例,演示了如何创建一个ZIP文件并向其中添加文件:
using (ZipFile zip = new ZipFile())
{zip.AddFile("file1.txt");zip.AddFile("file2.txt");zip.Save("result.zip");
}
更多关于文件压缩的API和用法,请参考DotNetZip官方文档。
2.3.2 文件解压缩
DotNetZip同样也提供了便捷的文件解压缩功能。以下是一个简单的示例,展示了如何从ZIP文件中提取文件:
using (ZipFile zip = ZipFile.Read("example.zip"))
{foreach (var entry in zip){entry.Extract("extractDir");}
}
更多关于文件解压缩的API和用法,请参考DotNetZip官方文档。
3. Ionic.Zip:提供在C#中创建、读取和修改ZIP文件的功能
3.1 简介
Ionic.Zip 是一个强大的开源库,它提供了在C#中创建、读取和修改ZIP文件的功能。通过Ionic.Zip,可以轻松地对ZIP文件进行操作,包括压缩、解压缩以及文件添加、删除等操作。
3.1.1 核心功能
Ionic.Zip 主要包含以下核心功能:
- 创建ZIP文件
- 读取ZIP文件
- 修改ZIP文件
- 密码保护ZIP文件
- 大容量ZIP文件支持
Ionic.Zip 官方网站:Ionic.Zip
3.1.2 使用场景
Ionic.Zip 可以应用于各种场景,包括但不限于:
- 文件备份与恢复
- 文件压缩与解压缩
- 数据传输与存储
3.2 安装与配置
3.2.1 安装指导
在 Visual Studio 中,可以通过 NuGet 包管理器来安装 Ionic.Zip 库。打开 NuGet 包管理器控制台,并输入以下命令来安装 Ionic.Zip:
Install-Package DotNetZip
3.2.2 基本配置
安装完成后,在需要使用 Ionic.Zip 的项目中引入命名空间即可开始使用:
using Ionic.Zip;
3.3 API 概览
3.3.1 ZIP文件创建
使用 Ionic.Zip 可以轻松创建ZIP文件,以下是一个简单的示例代码:
using (ZipFile zip = new ZipFile())
{zip.AddFile("file1.txt", "");zip.AddFile("file2.txt", "");zip.Save("result.zip");
}
在这个例子中,我们首先创建了一个新的 ZipFile 对象,然后向其中添加了两个文件,并最终保存为 result.zip。
3.3.2 ZIP文件读取
除了创建ZIP文件,Ionic.Zip 也提供了读取ZIP文件的功能,以下是一个读取ZIP文件的示例代码:
using (ZipFile zip = ZipFile.Read("example.zip"))
{foreach (ZipEntry entry in zip){Console.WriteLine(entry.FileName);entry.Extract("extracted");}
}
在这个例子中,我们使用 ZipFile.Read 方法读取了 example.zip 文件,并通过循环遍历了其中的所有文件,并将其解压到了 extracted 文件夹中。
以上就是 Ionic.Zip 在 C# 中创建、读取和修改ZIP文件的基本用法。详细的 API 可以参考官方文档:Ionic.Zip Documentation
4. SharpCompress:支持多种压缩格式的C#库
SharpCompress 是一个强大的C#库,可以处理多种不同的压缩格式文件。在本篇文章中,我们将介绍其核心功能、使用场景、安装与配置以及API概览。
4.1 简介
4.1.1 核心功能
SharpCompress 提供了对多种压缩格式的支持,包括 ZIP, RAR, 7Zip, TAR, GZip 等。它允许用户方便地对这些格式的文件进行压缩和解压操作,同时提供了丰富的 API 接口,可以满足各种复杂的需求。
4.1.2 使用场景
SharpCompress 可以被广泛应用于需要处理压缩文件的场景,比如文件上传、数据备份、日志归档等。无论是简单的文件压缩还是复杂的数据解压,SharpCompress 都能够提供稳定可靠的支持。
4.2 安装与配置
4.2.1 安装指导
你可以通过NuGet包管理器来安装SharpCompress。在Visual Studio中打开NuGet包管理器控制台,运行以下命令来安装SharpCompress:
Install-Package SharpCompress
4.2.2 基本配置
安装完成后,你可以在代码中引入SharpCompress库,并开始使用它的功能。
4.3 API 概览
4.3.1 压缩格式支持
SharpCompress 支持多种压缩格式,例如ZIP、RAR、7Zip等。下面是一个简单的示例,展示了如何使用SharpCompress来解压ZIP文件:
using (var archive = ArchiveFactory.Open("sample.zip"))
{foreach (var entry in archive.Entries){if (!entry.IsDirectory){entry.WriteToDirectory("output", new ExtractionOptions() { ExtractFullPath = true, Overwrite = true });}}
}
你可以根据自己的需求,进一步调整ExtractionOptions来满足更加复杂的解压需求。更多关于压缩和解压的操作,请参考 SharpCompress文档。
4.3.2 数据解压
除了压缩格式的支持外,SharpCompress还提供了丰富的API接口,用于处理数据解压的场景。例如,你可以使用SharpCompress来解压GZip格式的数据:
using (Stream stream = File.OpenRead("sample.gz"))
using (var reader = ReaderFactory.Open(stream))
{while (reader.MoveToNextEntry()){if (!reader.Entry.IsDirectory){reader.WriteEntryToDirectory("output", new ExtractionOptions() { ExtractFullPath = true, Overwrite = true });}}
}
以上代码演示了如何通过SharpCompress解压GZip格式的数据,并将解压后的内容保存到指定的目录中。
总之,SharpCompress是一个功能强大、易于使用的C#库,为处理多种压缩格式文件提供了良好的支持。无论是对压缩文件的操作,还是对数据解压的需求,它都能够满足你的要求。
希望本文能够对你有所帮助,更多详细信息请查看SharpCompress官方文档。
5. SevenZipSharp:对7-Zip进行封装提供C#接口
SevenZipSharp是一个对7-Zip进行封装,提供C#接口的开源项目,可以方便地在C#应用程序中使用7-Zip进行压缩和解压操作。
5.1 简介
5.1.1 核心功能
SevenZipSharp主要提供了以下核心功能:
- 压缩文件
- 解压文件
- 加密压缩文件
- 获取压缩文件信息
5.1.2 使用场景
SevenZipSharp适用于需要在C#应用程序中进行文件压缩和解压操作的场景,例如对文件进行打包、加密以及解压缩等操作。
5.2 安装与配置
5.2.1 安装指导
可以通过NuGet包管理器来安装SevenZipSharp。在Visual Studio中打开NuGet包管理器控制台,并执行以下命令来安装SevenZipSharp:
Install-Package SevenZipSharp
5.2.2 基本配置
安装完成后,在C#项目中引入SevenZipSharp的命名空间:
using SevenZip;
5.3 API 概览
5.3.1 7-Zip操作
SevenZipSharp提供了丰富的API来进行7-Zip操作,下面是一个简单的例子,演示了如何使用SevenZipSharp进行文件压缩和解压操作。
文件压缩示例
// 创建一个压缩文件实例
SevenZipCompressor compressor = new SevenZipCompressor();// 设置压缩级别
compressor.CompressionLevel = CompressionLevel.Ultra;// 设置压缩文件密码
compressor.EncryptHeaders = true;
compressor.ArchiveFormat = OutArchiveFormat.Zip;
compressor.CompressFiles("archive.7z", "file1.txt", "file2.txt");
官网链接:SevenZipSharp
文件解压示例
// 创建一个解压文件实例
SevenZipExtractor extractor = new SevenZipExtractor("archive.7z");// 设置解压文件密码
extractor.Password = "your_password";
extractor.ExtractArchive("destination_path");
官网链接:SevenZipSharp
5.3.2 压缩级别设置
SevenZipSharp允许用户设置压缩级别,以便根据特定需求进行文件压缩。下面是一个设置压缩级别的示例:
// 创建一个压缩文件实例
SevenZipCompressor compressor = new SevenZipCompressor();// 设置压缩级别为最大
compressor.CompressionLevel = CompressionLevel.Ultra;
官网链接:SevenZipSharp
6. SharpArchiver:用于C#的通用归档处理库
6.1 简介
SharpArchiver 是一个开源的 C# 库,用于处理各种归档文件格式,如 ZIP、RAR、TAR 等。它提供了丰富的 API,可以轻松地创建和解压归档文件。
6.1.1 核心功能
- 创建压缩包
- 解压缩压缩包
6.1.2 使用场景
- 在 C# 项目中需要对归档文件进行处理时,可以使用 SharpArchiver 来简化操作。
- 用于文件备份和恢复功能的实现。
6.2 安装与配置
使用 NuGet 包管理器可以方便地安装 SharpArchiver。
6.2.1 安装指导
在 Visual Studio 中打开 NuGet 包管理器控制台,执行以下命令来安装 SharpArchiver:
Install-Package SharpArchiver
6.2.2 基本配置
安装完成后,你可以在 C# 项目中直接引用 SharpArchiver 的命名空间来使用其功能:
using SharpArchiver;
6.3 API 概览
6.3.1 归档创建
通过 SharpArchiver 可以很方便地创建归档文件,以下是一个示例代码:
using (var archiver = new Archiver())
{archiver.CreateArchive("target.zip", "file1.txt", "file2.jpg", "folder");
}
以上代码创建了一个名为 target.zip
的 ZIP 归档文件,其中包含了 file1.txt
、file2.jpg
和 folder
这三项内容。
6.3.2 归档解压
解压归档文件同样简单,下面是一个简单的示例代码:
using (var archiver = new Archiver())
{archiver.ExtractArchive("source.zip", "destinationFolder");
}
以上代码将会解压名为 source.zip
的归档文件到 destinationFolder
目录。
更多详细信息和案例可以参考 SharpArchiver GitHub 页面。
总结
文件压缩在软件开发中扮演着重要角色,而选择合适的文件压缩库能够帮助开发者高效完成相关任务。通过本文的介绍,读者可以对SharpZipLib、DotNetZip、Ionic.Zip、SharpCompress、SevenZipSharp和SharpArchiver这六个C#文件压缩库有一个清晰的认识,从而更好地根据实际项目需求进行选择和应用。
相关文章:

【C#生态园】C#文件压缩库全面比较:选择最适合你的库
从核心功能到API概览:深度解析六大C#文件压缩库 前言 在软件开发过程中,文件的压缩和解压缩是一个常见的需求。针对C#开发者而言,选择合适的文件压缩库可以极大地简化开发工作。本文将介绍几个常用的C#文件压缩库,包括其核心功能…...

【测试】接口测试与接口自动化
壹、接口测试基础 一、接口测试概念 I、基础概念 是测试系统组件间接口的一种测试。 主要用于检测外部系统与系统间、内部子系统间的交互点;测试重点检查数据的交换、传递和控制管理过程,以及系统间的相互逻辑依赖关系。 内部接口调用相当于函数调用&am…...

Android设置边框圆角
在Android开发中,圆角设计十分常见,那么实现边框圆角有几种形式呢? 文章目录 设置圆角边框样式使用ClipToOutline进行裁切最后 设置圆角边框样式 常见的方式是在drawable文件夹下设置一个xml文件的边框样式,比如 <shape andro…...

SpringBoot项目打成jar包,在其他项目中引用
1、首先新建一个SpringBoot工程 记得要将Gradle换成Maven 2、新建一个要引用的方法 3、打包的时候要注意: ① 不能使用springboot项目自带的打包插件进行打包,下面是自带的: ②要换成传统项目的maven打包,如下图: 依…...

【音频可视化】通过canvas绘制音频波形图
前言 这两天写项目刚好遇到Ai对话相关的需求,需要录音功能,绘制录制波形图,写了一个函数用canvas实现可视化,保留分享一下,有需要的直接粘贴即可,使用时传入一个1024长的,0-255大小的Uint8Arra…...

解决github每次pull push输入密码问题
# 解决git pull/push每次都需要输入密码问题 git bash进入你的项目目录,输入: git config --global credential.helper store然后你会在你本地生成一个文本,上边记录你的账号和密码。配置项写入到 "C:\Users\用户名\ .gitconfig" …...

Java重修笔记 第六十四天 坦克大战(十四)IO 流 - 标准输入输出流、InputStreamReader 和 OutputStreamWriter
标准输入输出流 1. System.in 标准输入流 本质上是一个InputString,对应键盘,表示从键盘输入。 定义:public final static InputStream in null; 所以 Scanner scanner new Scanner(System.in); 会从键盘中获取数据 2. System.out 标准输…...

prctl的函数和pthread_self函数
1.prctl的函数原型如下: #include<sys/prctl.h> prctl(PR_SET_NAME, “process_name”);第一个参数是操作类型,指定PR_SET_NAME(对应数字15),即设置进程名; 第二个参数是进程名字符串,…...

Vim 命令行模式下的常用命令
Vim 命令行模式下的常用命令 文件操作: :w :保存当前文件。:w filename :将当前内容另存为指定的 filename 。:q :退出 Vim,如果文件有修改但未保存,会提示错误。:q! :强制退出 Vim,…...

【动态规划-最长递增子序列(LIS)】力扣2826. 将三个组排序
给你一个整数数组 nums 。nums 的每个元素是 1,2 或 3。在每次操作中,你可以删除 nums 中的一个元素。返回使 nums 成为 非递减 顺序所需操作数的 最小值。 示例 1: 输入:nums [2,1,3,2,1] 输出:3 解释: …...

Elastic Stack--16--ES三种分页策略
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 方式一:from size实现原理使用方式优缺点 方式二:scroll实现原理使用方式优缺点 方式三:search_after实现原理使用方式优缺点 三…...

[LeetCode] 315. 计算右侧小于当前元素的个数
题目描述: 给你一个整数数组 nums ,按要求返回一个新数组 counts 。数组 counts 有该性质: counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元素的数量。 题目链接: . - 力扣(LeetCode) 题目主要思路&a…...

【hot100-java】二叉树展开为链表
二叉树篇。 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* …...

如何在在 YOLOv3模型中添加Attention机制
在YOLOv3模型中添加Attention机制需要以下几个步骤: 1. 规定格式 当添加新的模块(如Attention机制模块)时,需要像定义[convolutional]、[maxpool]等层在cfg文件中的格式一样,对新模块进行格式规定。例如对于SE模块&a…...

单点登录Apereo CAS 7.1安装配置教程
笔者目前正在做一个单点登录的课题,历时较长总算摸到一些门路,其中的辛酸不易按下不表。截至本文发布,CAS的最新版本为7.1。由于涉及到课题内容,而且内容比较新,整理试验不容易,暂时只对VIP开放,后续课题完成后会完全开放,敬请谅解。 CAS项目区别 在CAS的项目选择上,…...

windows C++-移除界面工作线程(一)
本文档演示了如何使用并发运行时将 Microsoft 基础类 (MFC) 应用程序中由用户界面 (UI) 线程执行的工作移动到工作线程。 本文档还演示了如何提高冗长绘制操作的性能。 通过将阻塞性操作(例如,绘制)卸载到工作线程来从 UI 线程中移除工作&am…...

Qt小bug — LINK : fatal error LNK1158: 无法运行“rc.exe“
Qt小bug —— LINK :fatal error LNK1158:无法运行"rc.exe" 环境 Qt 5.14.2 MSVC 2015 x64 现象 解决 在电脑上找到rc.exe 和rcdll.dll (一般在C:\Program Files(x86)\Windows Kits*\bin\x64下面)拷贝到 C:\Qt\Qt5…...

c++小游戏
目录 狼人杀 走迷宫 炸弹人 贪吃蛇 飞翔的小鸟 跑酷 吃豆人 飞机大战 人生模拟器 坦克大战 修仙模拟器 搜集了一些小游戏,名字下是个人是个人喜欢度,可供参考~ 狼人杀 ❤❤❤❤ #include<bits/stdc.h> #include<cstdio> #incl…...

k8s为什么用Calico
Calico是一种开源的网络和安全解决方案,主要用于容器、虚拟机、宿主机之间的网络连接。 它支持Kubernetes、OpenShift、Docker EE、OpenStack等PaaS或IaaS平台,提供高效的网络通信和安全控制功能12。 Calico的核心组件包括Felix、etcd、BIRD等。F…...

HashMap 和 Hashtable 有什么区别?
HashMap和Hashtable都是Java中常用的存储键值对的集合类,它们都实现了Map接口,但二者之间存在一些显著的区别。以下是对HashMap和Hashtable区别的详细归纳: 一、线程安全性 HashMap:是非线程安全的,即多个线程可以同…...

【机器学习】深度学习、强化学习和深度强化学习?
深度学习、强化学习和深度强化学习是机器学习的三个重要子领域。它们有着各自独特的应用场景和研究目标,虽然都属于机器学习的范畴,但各自的实现方式和侧重点有所不同。 1. 深度学习(Deep Learning) 深度学习是一种基于神经网络的…...

fastadmin 多商户模式下侧边栏跳转路径BUG
记录:仅作自己项目记录,在一个域名下部署多套项目时,若不是多商户模式项目会出现跳转路径问题。 修改 \manystore\library\Auth.php 文件的 getSidebar 方法 // 1 改为: $v[url] isset($v[url]) && $v[url] ? $v[url]…...

java内置的四种函数式接口
供给型:Supplier 无入参,有返回值。 FunctionalInterface public interface Supplier<T> {T get();}消费型:Consumer 有入参,无返回值。 FunctionalInterface public interface Consumer<T> {void accept(T t);de…...

如何获取 uni-app 应用发布所需的证书、私钥与配置文件
引言 在开发和发布iOS应用时,开发者常常会面临一系列复杂的证书、私钥密码以及配置文件的管理问题。这些配置不仅影响到应用的开发调试,还决定了应用是否能够顺利通过审核并发布到App Store。对于使用uni-app进行开发的开发者来说,自动生成的…...

TCP网络通信——多线程
前面分别用多进程和多路复用完成了TCP网络通信,本文就来讲讲多线程的TCP通信。首先来了解一下线程的概念: 1、线程是进程的执行路线,它是进程内部的控制序列,或者说线程是进程的一部分(进程是一个资源单位,线程是执行单…...

【exp报错注入】
整数范围 最大整数 exp 函数介绍 报错盲注注入 payload分析 709C-ASCII 值就等于我们下面的 7091-1 ,C就是我们要猜的值,当我们猜测的值和ASCII码相等时,那么exp就不会出现报错,因为1-1还是等于709: 练习 id1 an…...

基于SpringBoot问卷调查系统小程序【附源码】
基于SpringBoot问卷调查系统小程序 效果如下: 管理员登录界面 管理员功能界面 调查人管理界面 问卷调查管理界面 问卷题目管理界面 用户登录界面 APP首页界面 公告信息界面 研究背景 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨&…...

LLM - 配置 GraphRAG + Ollama 服务 构建 中文知识图谱
欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/142795151 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 GraphR…...

简单认识redis - 6 redis 存储速度快的原因
1基于内存存储 缓存(内存)读写速度很快,相比于磁盘存储的Mysql 省去了磁盘I/O的次数。 2.高效的数据结构 SDS动态字符串: 1.字符串长度处理:Redis获取字符串长度,时间复杂度为O(1),而C语言中&am…...

【Qt Quick】状态:State 使用
State 是 Qt Quick 中管理界面组件状态的关键工具。它允许我们定义组件的不同状态,并且在用户交互或事件发生时进行状态切换,从而实现属性、外观和行为的动态变化。通过使用 State,可以避免复杂的条件逻辑,使代码更加简洁和可维护…...