写入resx文件c#

时间:2016-05-06 19:27:23

标签: c# resources resx

尝试写入用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如何解释应该使用资源编写器的方式。

3 个答案:

答案 0 :(得分:5)

您错过了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();
}

答案 1 :(得分:2)

您调用的方法确实是正确的,也是MSDN建议的方式。

传递给ResourceWriter的构造函数的参数是您希望存储资源文件的路径,包括文件名。

可以使用相对(仅文件名"myStrings.resources")或绝对(完整文件路径"C:\\Users\\Folder\\myStrings.resources")。 有关\\的更多信息......

我不知道您的第一个_paths元素的值是多少,但请确保它在您希望存储文件的位置正确形成。 如果你能让我知道你的_paths.AtElement(0)字符串是什么;我或许可以继续帮忙。

请注意如果您使用的是绝对文件路径,请确保日常“C:\ Users \ User1 \ AFolder”位置(来自Windows文件浏览器)中的\为逃脱;这是通过将\放在前面来完成的。

因此,例如,文件夹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();
}

这是使用using使用IDisposable衍生物的{{1}}的好习惯。

希望这有帮助!

答案 2 :(得分:0)

知道了!

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

然后将System.Resources添加到类文件的顶部。

立即使用ResXResourceWriter! :)