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

非常方便了,哈哈哈哈哈

相关推荐
wangnaisheng15 分钟前
【C#】死锁详解:发生原因、优化解决方案
c#
Rabitebla17 分钟前
vector 的骨架:三根指针、模板陷阱与迭代器失效的第一现场
开发语言·数据结构·c++·算法
时空系18 分钟前
第7篇:功能——打造你的工具箱 Rust中文编程
开发语言·网络·rust
csbysj202027 分钟前
CSS !important:深度解析与最佳实践
开发语言
初心未改HD31 分钟前
Go语言测试与Benchmark:测试驱动开发的实践指南
开发语言·golang
chxii39 分钟前
lua流程控制语句和table(表)数据结构
开发语言·junit·lua
逻辑驱动的ken1 小时前
Java高频面试考点场景题20
java·开发语言·深度学习·面试·职场和发展
W.A委员会1 小时前
多行溢出在末尾添加省略号
开发语言·javascript·css
wjs20241 小时前
RSS Item 元素:深入解析与使用指南
开发语言
tiger从容淡定是人生1 小时前
AI替代软件战略(一):从 CCleaner 到 MCP 架构重构 —— TigerCleaner 的工程实践
人工智能·重构·架构·c#·mcp