You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#遍历项目嵌入资源并获取文件对象以复制到本地目录

解决嵌入资源文件导出到本地的问题

用ResXResourceReader遍历Resources.resx时,嵌入的文件资源通常以UnmanagedMemoryStream或**byte[]**的形式存储,你只需要把这些内容转换成字节数组,再写入本地文件就能实现原样复制。

直接上可行代码:

using System.Resources;
using System.IO;

// 替换成你的Resources.resx路径
string resxFilePath = @"你的项目路径\Properties\Resources.resx";
// 替换成你要导出到的本地目录
string targetDirectory = @"C:\LocalOutputFolder";

// 确保目标目录存在,不存在就创建
Directory.CreateDirectory(targetDirectory);

using (ResXResourceReader resReader = new ResXResourceReader(resxFilePath))
{
    foreach (DictionaryEntry resourceItem in resReader)
    {
        string fileName = resourceItem.Key.ToString();
        object resourceContent = resourceItem.Value;

        byte[] fileBytes = null;

        // 处理Visual Studio默认嵌入的文件资源(通常是UnmanagedMemoryStream类型)
        if (resourceContent is UnmanagedMemoryStream stream)
        {
            fileBytes = new byte[stream.Length];
            stream.Read(fileBytes, 0, fileBytes.Length);
            // 重置流指针,避免后续操作异常
            stream.Seek(0, SeekOrigin.Begin);
        }
        // 处理直接存储为字节数组的资源
        else if (resourceContent is byte[] bytes)
        {
            fileBytes = bytes;
        }
        // 跳过非文件类型的资源(比如字符串、图片对象等)
        else
        {
            continue;
        }

        // 拼接输出文件的完整路径
        string outputFilePath = Path.Combine(targetDirectory, fileName);
        // 写入本地文件
        File.WriteAllBytes(outputFilePath, fileBytes);
    }
}

关键点说明

  • resourceItem.Key就是你在资源文件里看到的文件名,resourceItem.Value是文件的内容载体
  • 若你是通过Visual Studio的资源编辑器添加的文件,大概率是UnmanagedMemoryStream类型,需要转成字节数组再写入
  • 代码会自动跳过非文件类型的资源(比如字符串、图标对象等),避免无效操作

内容的提问来源于stack exchange,提问作者Gilad Dahan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 18:25:48