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