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

非常方便了,哈哈哈哈哈

相关推荐
Traced back13 分钟前
WinForms 线程安全三剑客详解
安全·c#·winform
喵叔哟21 分钟前
05-LINQ查询语言入门
c#·solr·linq
云栖梦泽23 分钟前
易语言开发从入门到精通:补充篇·网络编程进阶+实用爬虫开发·API集成·代理IP配置·异步请求·防封禁优化
开发语言
java1234_小锋37 分钟前
Java高频面试题:SpringBoot为什么要禁止循环依赖?
java·开发语言·面试
铅笔侠_小龙虾43 分钟前
Flutter Demo
开发语言·javascript·flutter
2501_944525541 小时前
Flutter for OpenHarmony 个人理财管理App实战 - 账户详情页面
android·java·开发语言·前端·javascript·flutter
福大大架构师每日一题1 小时前
ComfyUI v0.11.1正式发布:新增开发者专属节点支持、API节点强化、Python 3.14兼容性更新等全方位优化!
开发语言·python
wangdaoyin20101 小时前
若依vue2前后端分离集成flowable
开发语言·前端·javascript
向阳开的夏天2 小时前
麒麟V10源码编译QT5.6.3 (x86 & arm64)
开发语言·qt
Evand J2 小时前
【MATLAB例程】TOA和TDOA混合定位,适用于二维平面的高精度定位。锚点数量、位置、测量噪声可自行调节
开发语言·matlab·定位·tdoa