【C#】如何把资源打包成zip压缩包,内嵌进程序中,然后程序可以直接用代码进行访问,无需解压

如题

如何把资源打包成zip压缩包,内嵌进程序中,然后程序可以直接用代码进行访问,无需解压。

这个我最近用到了,问了AI,又学习到了

  1. 首先将资源文件,打包成zip格式,然后VS中把它添加到资源Resources文件里头
  2. 然后需要有一个函数把资源用代码可以调取出来

它帮我写了一个比较方便的函数,给一个名字就可以帮我找对应的资源出来,然后还是流Stream的。

csharp 复制代码
/// <summary>
/// 安全地读取嵌入资源
/// </summary>
public static Stream GetResourceStream(string partialName)
{
	Assembly assembly = Assembly.GetExecutingAssembly();

	// 方式1:直接尝试
	string fullName = assembly.GetName().Name + "." + partialName.Replace('/', '.').Replace('\\', '.');
	Stream stream = assembly.GetManifestResourceStream(fullName);

	if (stream != null) return stream;

	// 方式2:搜索所有资源
	string[] resources = assembly.GetManifestResourceNames();
	string resourceName = resources.FirstOrDefault(r =>
		r.EndsWith(partialName, StringComparison.OrdinalIgnoreCase) ||
		r.Contains(partialName));

	if (resourceName != null)
	{
		return assembly.GetManifestResourceStream(resourceName);
	}

	throw new FileNotFoundException($"找不到嵌入资源: {partialName}");
}
  1. 拿到压缩包的Stream之后,用ZipArchive类(C#内置的)直接在内存中解压
    xxxx,压缩包的名字
    xxxxxxx,需要的文件的名字
csharp 复制代码
			// 从嵌入式资源加载ZIP
			using (var resourceStream = GetResourceStream("xxxx"))
			using (var archive = new ZipArchive(resourceStream))
			{
				// 加载HTML文件
				var entry = archive.GetEntry("xxxxxxx");
				using (var reader = new StreamReader(entry.Open()))
				{
					var content = await reader.ReadToEndAsync();
					//这里就取出压缩包内需要的文件的内容了
					//后面该干啥就干啥
				}
			}

非常方便了,哈哈哈哈哈

相关推荐
敢敢のwings1 小时前
智元 GO-2 与 AgiBot-World 深度解读
开发语言·后端·golang
yaoxin5211231 小时前
503. Java 反射 - 编写 ServiceFactory 类
java·开发语言·python
一个帅气昵称啊1 小时前
.Net C# AI智能体开发-快速开始
开发语言·c#·.net
冬夜戏雪2 小时前
agent的trace 和eval
开发语言·前端·javascript
Sagittarius_A*2 小时前
Burst Lab | PHP 审计 13|反序列化(三):POP 链构造与 Gadget Chain 分析
开发语言·web安全·php·代码审计·反序列化
职场的momo2 小时前
11个后端与AI岗位同时开放:Java、网关、推理优化怎么匹配
java·开发语言·人工智能
蓝速科技2 小时前
蓝速科技丨新旧楼宇混杂场景下会议室预约门牌屏一体化改造方案
开发语言·科技·php
梦想的旅途23 小时前
Python实现企业微信文本消息发送
开发语言·python·企业微信
大鹏说大话4 小时前
美业微信会员系统哪个好
开发语言
半亩码田4 小时前
C#转Python第3.6篇:Python 的 @property 比 C# 的 get/set 更灵活
java·python·c#