在C#中写入resx文件

3

尝试编写写入XML格式的Resx文件。

如何添加列和行。

List<string> _paths = new List<string> { ConfigurationManager.AppSettings["SpanPath"], ConfigurationManager.AppSettings["FrenPath"], ConfigurationManager.AppSettings["RusPath"] };

        ResourceWriter resourceWriter = new ResourceWriter(_paths.ElementAt(0));

        resourceWriter.AddResource("Key1", "String1");
        resourceWriter.AddResource("Key2", "String2");
        resourceWriter.Close();

我希望添加key1,并将该行旁边的列设置为string1,以此类推。

我认为我没有完全理解msdn解释资源编写器应如何使用的方式。


我找不到“ResXResourceWriter”,但其他人好像可以找到。 - user5537890
3个回答

4
您缺少resourceWriter.Generate()调用。
List<string> _paths = new List<string> { ConfigurationManager.AppSettings["SpanPath"], ConfigurationManager.AppSettings["FrenPath"], ConfigurationManager.AppSettings["RusPath"] };

using(ResXResourceWriter resourceWriter = new ResXResourceWriter(_paths.ElementAt(0)))
{
    resourceWriter.AddResource("Key1", "String1");
    resourceWriter.AddResource("Key2", "String2");
    resourceWriter.Generate();
}

编辑。如果你丢失了旧的键,可以将它们存储在哈希表中,将新的键添加到哈希表中,并从哈希表中重新生成resx文件。

using System.Resources;

List<string> _paths = new List<string> { ConfigurationManager.AppSettings["SpanPath"], ConfigurationManager.AppSettings["FrenPath"], ConfigurationManager.AppSettings["RusPath"] };

Hashtable oHt = new Hashtable();

// Read the keys and store in a hash table
using (ResXResourceReader oReader = new ResXResourceReader(_paths.ElementAt(0)))
{
     IDictionaryEnumerator oResource = oReader.GetEnumerator();
     while (oResource.MoveNext())
             oHt.Add(oResource.Key,oResource.Value);
}

//Add the new keys to the hash table
oHt["Key1"] = "String1";
oHt["Key2"] = "String2";

//Re-generate the new  resx from the hash table
using (ResXResourceWriter oWriter = new ResXResourceWriter(_paths.ElementAt(0)))
{
      foreach (string key in oHt.Keys)
           oWriter.AddResource(key.ToString(), oHt[key].ToString());
      oWriter.Generate();
}

但是,这会删除在 Visual Studio 中打开 resx 文件时出现的所有 xml 和表格内容。当打开 resx 时,文件显示为“ÎÊï¾ ‘ lSystem.Resources.ResourceReader, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089#System.Resources.RuntimeResourceSet PADPADP —…|£—…| Þ K e y 1 K e y 2 String1String2”。 - user5537890
将旧键保存在哈希表中,将键添加到哈希表中,并将哈希表中的所有键写入 resx。 - nobody
抱歉,可能是因为我使用的是ResourceWriter而不是ResXResourceWriter?但我找不到ResXResourceWriter的命名空间?另外,我不知道如何执行您最后的评论。 :) - user5537890
找到了自己的解决方案,还是感谢你的帮助并点赞!干杯 - user5537890

1
您所调用的方法是正确的,与MSDN建议的方式相同。
您在构造函数中传递的参数ResourceWriter是资源文件存储的路径,包括文件名。
可以使用相对路径(只有文件名"myStrings.resources")或绝对路径(完整文件路径"C:\\Users\\Folder\\myStrings.resources")。稍后会详细介绍\\
我不知道您的第一个_paths元素的值是什么,但请确保它是为文件存储位置正确形成的。如果您能让我知道_paths.AtElement(0)字符串的值,我或许可以提供更多帮助。
请注意,如果您使用绝对文件路径,请确保您每天在Windows文件浏览器中使用的"C:\Users\User1\AFolder"位置中的\已经转义,这可以通过在前面放置\来完成。
例如,一个文件夹 C:\Users\User1\AFolder 应该被转义并写成字符串形式 "C:\\Users\\User1\\AFolder"
同样重要的是,请确保使用 using,因为 IResourceWriter 类实现了 IDisposable
通过在 using 语句中包装您的代码来实现这一点:
using (ResourceWriter resourceWriter = new ResourceWriter(_paths.ElementAt(0))
{
    resourceWriter.AddResource("Key1", "String1");
    resourceWriter.AddResource("Key2", "String2");
    resourceWriter.Close();
}

在使用IDisposable衍生类的情况下,使用using是一个很好的实践。

希望这可以帮到你!


0

明白了!

必须从解决方案资源管理器中添加引用。 添加对System.Windows.Forms的引用。

然后在类文件顶部添加System.Resources。

现在可以使用ResXResourceWriter工具了!:)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接