如题
如何把资源打包成zip压缩包,内嵌进程序中,然后程序可以直接用代码进行访问,无需解压。
这个我最近用到了,问了AI,又学习到了
- 首先将资源文件,打包成zip格式,然后VS中把它添加到资源Resources文件里头
- 然后需要有一个函数把资源用代码可以调取出来
它帮我写了一个比较方便的函数,给一个名字就可以帮我找对应的资源出来,然后还是流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}");
}
- 拿到压缩包的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();
//这里就取出压缩包内需要的文件的内容了
//后面该干啥就干啥
}
}
非常方便了,哈哈哈哈哈