本文详细介绍了C#中如何读取不同类型的资源文件,包括设置文件生成操作为'嵌入的资源'和'Resource'的读取方法,以及针对.resx和.resources文件的示例代码。通过示例,展示了读取字符串、二进制、图像和文件内容等资源的方法。
摘要由CSDN通过智能技术生成
System.Resources 名字空间支持三种资源文件:.txt 文件,只能有字符串资源。不能被嵌入到 Assembly 中,则很容易暴露,被客户修改。最大缺点是仅支持字符串资源,不推荐使用。.resx 文件由 XML 组成,可以加入任何资源,包括二进制。同样不能被嵌入到 Assembly 中。在 System.Resources 名字空间中有专用读写的类。 .NET(C#) 创建这种文件然后将其转成 .resources 文件并根据设置将其嵌入到 Assembly 中。.resources 文件,PE 格式,可以加入任何资源。唯一可以被嵌入到 Assembly 的文件,在 System.Resources 名字空间中有专用读写的类。本文主要介绍.NET(C#) 读取Resource资源文件的方法,以及相关的示例代码。
1、嵌入的资源 (Embeded Resource)
在VS中将文件的生成操作设置“嵌入的资源”的读取方法,代码如下
using(Stream stream = Assembly.GetExecutingAssebly().GetManifestResourceStream("PDF2PPT.Aspose.Total.lic"))
string content = new StreamReader(stream).ReadToEnd();
2、资源(Resource)
在VS(Microsoft Visual Studio)中将文件的生成操作设置 “Resource” 的读取方法,代码如下,
Stream stream = null;'
ResourceManager rm = new ResourceManager("PDF2PPT.g",typeof(Form1).Assembly);
ResourceSet rs = rm.GetResourceSet(new System.Globalization.CultureInfo("en"),true,true);
foreach(DIctionaryEntry item in rs)
if(item.Key.ToString()==fullname)
stream = item.Value as Stream;
using(stream)
string content = new StreamReader(stream).ReadToEnd();
3、.Resx资源文件
直接添加文件到.Resx资源文件中,在运行时使用Resource Manager读取,代码如下,
1)读取内容
string sTemplate = string.Empty;
Assembly assembly = Assembly.GetExecutingAssembly();
string resourceName = assembly.GetName().Name.ToString() + ".Resources.PageTemplate.html";
using (Stream stream = assembly.GetManifestResourceStream(resourceName))
using (StreamReader sr = new StreamReader(stream))
sTemplate = sr.ReadToEnd();
2)复制文件
string sdb = AppDomain.CurrentDomain.BaseDirectory+"rec.db";
if(!File.Exists(sdb))
Assembly assembly = Assembly.GetExecutingAssembly();
string resourceName = assembly.GetName().Name.ToString()+".Resources.rec.db";
using(Stream stream = assembly.GetManifestResourceStream(resourceName))
byte[] buffer = new byte[stream.Length];
stream.Read(buffer,0,buffer.Length);
stream.Seek(0,SeekOrigin.Begin);
using(FileStream fs = new FileStream(sDb,FileMode.Create)
fs.Write(buffer,0,buffer.Length);
Console.WriteLine($"db文件:{sDb},不存在,已自动复制");
3)获取资源中的图像文件
roperties.Resources res = new Properties.Resources();
PropertyInfo[] properInfo = res.GetType().GetProperties(BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Instance);
foreach (PropertyInfo item in properInfo)
// 获取指定文件名格式的图片
if (item.Name.Contains("img_"))
Bitmap b = (Bitmap)Resources.ResourceManager.GetObject(item.Name, Properties.Resources.Culture);
using (MemoryStream stream = new MemoryStream())
b.Save(stream, ImageFormat.Jpeg);
byte[] data = new byte[stream.Length];
stream.Seek(0, SeekOrigin.Begin);
stream.Read(data, 0, Convert.ToInt32(stream.Length));
// do someting..
4)获取资源中的字符串
string sVal = Resources.ResourceManager.GetObject(item.Name);
1、双击Resources.resx
2、选择添加的资源类型,比如图像,右边就是添加资源,添加资源时可以选择新资源,就是这此处自己编辑一个资源,也可以选择添加已经存在的资源。
3、添加完成后,出现一个Resources的文件夹
4、调用资源
1) 直接使用属性
Bitmap bmp = Properties.Resources.b7047728953b7aa0c4cde66371f8a94c;
2)使用反射
Assembly myAssem = Assembly.GetExecutingAssemb
VB.NET中资源的名称为:项目默认命名空间.资源文件名
C#中则是:项目命名空间.资源文件所在文件夹名.资源文件名例如:istr = assm.GetManifestResourceStream("项目命名空间.资源文件所在文件夹名.资源文件名");
读取资源文件注意: 资源文件一定要是嵌入的资源; 并且资源文件名要带扩...
Dotnet中嵌入资源(位图、图标或光标等)有两种方式,一是直接把资源文件加入到项目,作为嵌入资源,在代码中通过Assembly的GetManifestResourceStream方法获取资源的Stream。另一种方法是在项目中加入. resx资源文件,在资源文件中添加资源,由ResourceManager类统一管理其中的资源。
下面分别详述这两种方法
一、使用GetManifestResourceStream读取嵌入资源
1、加入资源文件
直接把要嵌入到程序集的资源文件加入到项目中,可以加在项目的
比如有两个资源文件,en-us.resx和zh-cn.resx
public static string GetLangString(string Key, string langtype, string FilePath)
string filename;
switch (langtype)