C# 读取.resx资源文件内字符串的方法

本文介绍如何使用C#操作资源文件(.resx),包括通过ResourceManager读取资源、使用ResXResourceReader遍历资源文件内容等。适用于.NET平台开发者。

添加资源文件,并命名为innerResource.resx。


代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;
using System.Resources;
using System.Windows.Forms;

namespace Demo
{
    public class DemoProgram
    {
       public static void Main(string[] args)
        {
            // System.Reflection.Assembly为资源的主程序集,这里为Demo
            ResourceManager resManagerA = new ResourceManager("Demo.innerResource", typeof(DemoProgram).Assembly);
            string astring = resManagerA.GetString("Astring");
            Console.WriteLine(astring);
            Console.ReadKey();

            ResourceManager resManagerB = new ResourceManager("Demo.innerResource", typeof(innerResource).Assembly);
            string bstring = resManagerB.GetString("Bstring");
            Console.WriteLine(bstring);
            Console.ReadKey();

            ResourceManager resMan = new ResourceManager(typeof(innerResource));
            string cstring = resMan.GetString("Cstring");
            Console.WriteLine(cstring);
            Console.ReadKey();            

            //调用ResXResourceReader类,需要引用System.Windows.Forms.dll,下同
            ResXResourceReader resxReader = new ResXResourceReader(@"C:\Users\Desktop\Demo\Demo\innerResource.resx");
            IDictionaryEnumerator dict = resxReader.GetEnumerator();
            while (dict.MoveNext())
            {
                Console.WriteLine("{0},{1}", dict.Key, dict.Value);
            }
            Console.ReadKey();

            ResXResourceSet resxSet = new ResXResourceSet(@"C:\Users\Desktop\Demo\Demo\innerResource.resx");
            IDictionaryEnumerator dicts = resxSet.GetEnumerator();
            while (dicts.MoveNext())
            {
                Console.WriteLine("{0},{1}", dicts.Key, dicts.Value);
            }
            Console.ReadKey();         
        }
    }
}

C#中访问和操作 `.resx` 资源文件是一个常见的需求,尤其是在处理本地化、图像资源字符串等静态数据时。以下是几种常见的方式,用于访问和操作 `.resx` 文件中的资源。 ### 访问默认的 Resources.resx 文件 在 C# 项目中,通常会自动生成一个名为 `Resources.resx` 的资源文件,并且可以通过 `Properties.Resources` 类直接访问其中的资源。这种方式适用于项目级别的资源管理。 例如,在 WinForms 或 WPF 应用程序中,可以使用以下方式访问资源: ```csharp // 假设资源文件中有一个名为 "Logo" 的图片资源 pictureBox1.Image = Properties.Resources.Logo; ``` 这种方式简单且直观,适合资源较少且不需要动态加载的情况[^2]。 ### 动态加载外部 .resx 文件 如果需要访问非默认的 `.resx` 文件(例如,从磁盘加载一个独立的 `.resx` 文件),则可以使用 `ResXResourceSet` 和 `ResourceManager` 类来实现动态加载。 #### 使用 `ResXResourceSet` 加载资源 ```csharp using System.Resources; ResXResourceSet resourceSet = new ResXResourceSet("path/to/your/resources.resx"); string value = (string)resourceSet.GetObject("ResourceKey"); ``` 此方法适用于需要从外部文件加载资源的场景,如插件系统或多语言支持[^4]。 #### 使用 `ResourceManager` 实现多语言支持 对于需要支持多语言的应用程序,可以通过 `ResourceManager` 来访问不同区域设置下的资源文件(如 `Resources.en-US.resx`, `Resources.zh-CN.resx`)。 ```csharp System.Globalization.CultureInfo culture = new System.Globalization.CultureInfo("zh-CN"); ResourceManager rm = new ResourceManager("Namespace.Resources", typeof(Program).Assembly); string greeting = rm.GetString("Greeting", culture); ``` 这种方法非常适合国际化应用程序,能够根据用户的语言偏好自动选择合适的资源文件[^5]。 ### 操作 .resx 文件内容 如果需要在运行时修改 `.resx` 文件的内容,可以使用 `ResXResourceWriter` 类将新的键值对写入资源文件。 ```csharp using System.Resources; ResXResourceWriter writer = new ResXResourceWriter("path/to/your/resources.resx"); writer.AddResource("NewKey", "NewValue"); writer.Generate(); writer.Close(); ``` 这种方式允许在运行时动态更新资源文件,但需要注意的是,频繁地写入资源文件可能会影响性能,并可能导致文件锁定问题。 ### 示例代码:读取和显示资源中的图片 ```csharp private void FormMain_Load(object sender, EventArgs e) { // 假设 pbxServer 是一个 PictureBox 控件 pbxServer.Image = Properties.Resources.ServerStart; } ``` 该示例展示了如何在 WinForms 中通过 `Properties.Resources` 快速访问资源文件中的图片,并将其赋值给控件[^2]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值