【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();
					//这里就取出压缩包内需要的文件的内容了
					//后面该干啥就干啥
				}
			}

非常方便了,哈哈哈哈哈

相关推荐
Renhao-Wan2 小时前
数据结构在Java后端开发与架构设计中的实战应用
java·开发语言·数据结构
LawrenceLan2 小时前
16.Flutter 零基础入门(十六):Widget 基础概念与第一个 Flutter 页面
开发语言·前端·flutter·dart
sheji34162 小时前
【开题答辩全过程】以 基于Java的智慧党建管理系统的设计与实现为例,包含答辩的问题和答案
java·开发语言
zh_xuan2 小时前
kotlin数据类用法
开发语言·kotlin
LawrenceLan2 小时前
17.Flutter 零基础入门(十七):StatelessWidget 与 State 的第一次分离
开发语言·前端·flutter·dart
烤麻辣烫2 小时前
java进阶--刷题与详解-1
java·开发语言·学习·intellij-idea
编程大师哥2 小时前
C++ 中解锁 Redis
开发语言·c++·redis
我是小鳄鱼2 小时前
Day 3: Bash 工具-- 30天复刻了一个 Claude Code
开发语言·bash
小小仙。2 小时前
IT自学第十八天
java·开发语言·算法