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
相关产品推荐
相关产品推荐

