Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 以编程方式修改现有资源文件_C#_.net_Vb.net_Resources - Fatal编程技术网

C# 以编程方式修改现有资源文件

C# 以编程方式修改现有资源文件,c#,.net,vb.net,resources,C#,.net,Vb.net,Resources,我使用以下代码以编程方式生成资源文件 ResXResourceWriter resxWtr = new ResXResourceWriter(@"C:\CarResources.resx"); resxWtr.AddResource("Title", "Classic American Cars"); resxWtr.Generate(); resxWtr.Close(); 现在,我想修改上面代码中的资源文件。如果使用相同的代码,现有的资源文件将被替换。请帮我修改,不要丢失现有内容 致以最良好

我使用以下代码以编程方式生成资源文件

ResXResourceWriter resxWtr = new ResXResourceWriter(@"C:\CarResources.resx");
resxWtr.AddResource("Title", "Classic American Cars");
resxWtr.Generate();
resxWtr.Close();
现在,我想修改上面代码中的资源文件。如果使用相同的代码,现有的资源文件将被替换。请帮我修改,不要丢失现有内容

致以最良好的祝愿,
Ankit

这里有一个函数可以帮助您修改资源文件

public static void UpdateResourceFile(Hashtable data, String path)
{
    Hashtable resourceEntries = new Hashtable();

    //Get existing resources
    ResXResourceReader reader = new ResXResourceReader(path);
    if (reader != null)
    {
        IDictionaryEnumerator id = reader.GetEnumerator();
        foreach (DictionaryEntry d in reader)
        {
            if (d.Value == null)
                resourceEntries.Add(d.Key.ToString(), "");
            else
                resourceEntries.Add(d.Key.ToString(), d.Value.ToString());
        }
        reader.Close();
    }

    //Modify resources here...
    foreach (String key in data.Keys)
    {
        if (!resourceEntries.ContainsKey(key))
        {

            String value = data[key].ToString();
            if (value == null) value = "";

            resourceEntries.Add(key, value);
        }
    }

    //Write the combined resource file
        ResXResourceWriter resourceWriter = new ResXResourceWriter(path);

        foreach (String key in resourceEntries.Keys)
        {
            resourceWriter.AddResource(key, resourceEntries[key]);
        }
        resourceWriter.Generate();
        resourceWriter.Close();

}
参考链接

公共静态void AddOrUpdateResource(字符串键,字符串值)
{
var resx=新列表();
使用(var reader=new ResXResourceReader(resourceFilepath))
{
resx=reader.Cast().ToList();
var existingResource=resx.Where(r=>r.Key.ToString()==Key.FirstOrDefault();
if(existingResource.Key==null&&existingResource.Value==null)//新建!
{
Add(新字典entry(){Key=Key,Value=Value});
}
否则//修改资源!
{
var modifiedResx=newdictionaryentry(){Key=existingResource.Key,Value=Value};
resx.Remove(existingResource);//正在删除资源!
Add(modifiedResx);//然后添加资源!
}
}
使用(var writer=newresxresourceswriter(ResxPathEn))
{
resx.ForEach(r=>
{
//再次添加要生成的所有资源和最终项目
writer.AddResource(r.Key.ToString(),r.Value.ToString());
});
writer.Generate();
}
}

我也遇到了同样的问题,这就解决了:

这将附加到现有的.resx文件中

 var reader = new ResXResourceReader(@"C:\CarResources.resx");//same fileName
 var node = reader.GetEnumerator();
 var writer = new ResXResourceWriter(@"C:\CarResources.resx");//same fileName(not new)
 while (node.MoveNext())
         {
     writer.AddResource(node.Key.ToString(), node.Value.ToString());
       }
  var newNode = new ResXDataNode("Title", "Classic American Cars");
  writer.AddResource(newNode);
  writer.Generate();
  writer.Close();

我不想重写现有的资源文件,我只想向它添加新的资源。还有别的办法吗?
 var reader = new ResXResourceReader(@"C:\CarResources.resx");//same fileName
 var node = reader.GetEnumerator();
 var writer = new ResXResourceWriter(@"C:\CarResources.resx");//same fileName(not new)
 while (node.MoveNext())
         {
     writer.AddResource(node.Key.ToString(), node.Value.ToString());
       }
  var newNode = new ResXDataNode("Title", "Classic American Cars");
  writer.AddResource(newNode);
  writer.Generate();
  writer.Close();