如何从Resources文件夹获取图片的string路径而非byte[]?
解决Resources中图片获取string路径的问题
先说明你之前方法失败的原因:
- 拼接程序集路径:当图片设为嵌入资源时,它并非磁盘上的独立文件,你拼接的路径自然找不到对应文件。
Assembly.Location指向的是编译后程序集的位置,和Resources的原始目录没有关联。 - 直接调用
Resource.day:嵌入资源本身是以byte[]形式存储的,强行转成string必然因类型不匹配报错。 byte[]转string:图片是二进制数据,不是文本内容,这种转换完全没有意义,得到的字符串不可能是有效的文件路径。
两种可行的解决方案:
方案1:让图片作为独立文件复制到输出目录(最简单)
- 在Visual Studio里找到Resources文件夹下的
day.jpg,右键点击属性 - 把「生成操作」改成内容,「复制到输出目录」改成如果较新则复制(或「始终复制」)
- 代码里用程序基目录拼接路径:
using System.IO; using System; string dayWallpaper = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Resources", "day.jpg"); // 此时File.Exists(dayWallpaper)应该返回true
方案2:将嵌入资源的byte[]写入临时文件(适合不想暴露文件的场景)
如果必须把图片作为嵌入资源打包在程序集里,那就把byte[]写入临时文件,用临时文件的路径:
using System.IO; // 从资源获取二进制数据 byte[] dayImageBytes = Resource.day; // 创建临时文件路径 string tempFilePath = Path.Combine(Path.GetTempPath(), "day_temp.jpg"); // 写入到临时文件 File.WriteAllBytes(tempFilePath, dayImageBytes); // 现在tempFilePath就是可用的string路径,用完后可以删除临时文件 // File.Delete(tempFilePath);
内容的提问来源于stack exchange,提问作者Martin
相关产品推荐
相关产品推荐

