写入resx文件c#

写入resx文件c#,c#,resources,resx,C#,Resources,Resx,正在尝试写入以xml编写的Resx文件 如何向其中添加列和行 List<string> _paths = new List<string> { ConfigurationManager.AppSettings["SpanPath"], ConfigurationManager.AppSettings["FrenPath"], ConfigurationManager.AppSettings["RusPath"] }; ResourceWriter res

正在尝试写入以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();
List\u paths=新列表{ConfigurationManager.AppSettings[“SpanPath”]、ConfigurationManager.AppSettings[“FrenPath”]、ConfigurationManager.AppSettings[“RusPath”]};
ResourceWriter ResourceWriter=新的ResourceWriter(_path.ElementAt(0));
resourceWriter.AddResource(“Key1”、“String1”);
AddResource(“键2”、“字符串2”);
resourceswriter.Close();
我想添加key1,并使该行上它旁边的列具有string1,依此类推


我想我不明白msdn是如何解释资源编写器的使用方式的

您缺少
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();
}
List\u paths=新列表{ConfigurationManager.AppSettings[“SpanPath”]、ConfigurationManager.AppSettings[“FrenPath”]、ConfigurationManager.AppSettings[“RusPath”]};
正在使用(ResXResourceWriter resourceWriter=new ResXResourceWriter(_path.ElementAt(0)))
{
resourceWriter.AddResource(“Key1”、“String1”);
AddResource(“键2”、“字符串2”);
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();
}
使用系统资源;
列表_路径=新列表{ConfigurationManager.AppSettings[“SpanPath”]、ConfigurationManager.AppSettings[“FrenPath”]、ConfigurationManager.AppSettings[“RusPath”];
Hashtable oHt=新的Hashtable();
//读取密钥并存储在哈希表中
正在使用(ResXResourceReader或Reader=new ResXResourceReader(_path.ElementAt(0)))
{
IDictionaryEnumerator oResource=oReader.GetEnumerator();
while(oResource.MoveNext())
oHt.Add(oResource.Key,oResource.Value);
}
//将新键添加到哈希表中
oHt[“键1”]=“字符串1”;
oHt[“键2”]=“字符串2”;
//从哈希表重新生成新的resx
正在使用(ResXResourceWriter oWriter=new ResXResourceWriter(_path.ElementAt(0)))
{
foreach(oHt.Keys中的字符串键)
AddResource(key.ToString(),oHt[key].ToString());
oWriter.Generate();
}

您调用的方法确实是正确的,而且是MSDN建议的方法

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

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

我不知道您的第一个
\u路径
元素的值是多少,但请确保它的格式正确,适合您希望存储文件的位置。如果您能让我知道您的
\u路径.atlement(0)
字符串是什么;我或许可以进一步提供帮助

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

因此,例如一个文件夹
C:\Users\User1\AFolder
实际上应该被转义并写入一个字符串,如
“C:\\Users\\User1\\AFolder”

同样重要确保使用
IResourceWriter
类实现的
IDisposable
一样

通过将代码包装到using语句中来实现这一点:

using (ResourceWriter resourceWriter = new ResourceWriter(_paths.ElementAt(0))
{
    resourceWriter.AddResource("Key1", "String1");
    resourceWriter.AddResource("Key2", "String2");
    resourceWriter.Close();
}
在使用
IDisposable
衍生工具的情况下,使用
use
是一种很好的做法

希望这有帮助

明白了

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

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


现在可与ResXResourceWriter合作!:)

但这将删除在VS中打开resx文件时显示的所有xml和表内容。当打开resx时,文件显示“lSystem.Resources.ResourceReader,mscorlib,版本=4.0.0.0,区域性=中性,PublicKeyToken=b77a5c561934e089#System.Resources.RuntimeResourceSet PADPADP-…|-…| K y 1 K y 2 String1字符串2“将旧密钥保存在哈希表中,将密钥添加到哈希表,并将哈希表中的所有密钥写入resxSorry,可能是因为我使用的是resourcewriter而不是ResXResourceWriter?但是我找不到ResXResourceWriter的名称空间?哦,我不知道该怎么做,你最后的评论。:)找到我自己的有效解决方案!不管怎么说,你都投了赞成票!干杯我找不到“ResXResourceWriter”尽管有人