Modifying existing resource file programmatically

14,015

Solution 1

public static void AddOrUpdateResource(string key, string value)
{
    var resx = new List<DictionaryEntry>();
    using (var reader = new ResXResourceReader(resourceFilepath))
    {
        resx = reader.Cast<DictionaryEntry>().ToList();
        var existingResource = resx.Where(r => r.Key.ToString() == key).FirstOrDefault();
        if (existingResource.Key == null && existingResource.Value == null) // NEW!
        {
            resx.Add(new DictionaryEntry() { Key = key, Value = value });
        }
        else // MODIFIED RESOURCE!
        {
            var modifiedResx = new DictionaryEntry() { Key = existingResource.Key, Value = value };
            resx.Remove(existingResource);  // REMOVING RESOURCE!
            resx.Add(modifiedResx);  // AND THEN ADDING RESOURCE!
        }
    }
    using (var writer = new ResXResourceWriter(ResxPathEn))
    {
        resx.ForEach(r =>
        {
            // Again Adding all resource to generate with final items
            writer.AddResource(r.Key.ToString(), r.Value.ToString());
        });
        writer.Generate();
    }
}

Solution 2

I had the same problem this resolve it:

This will append to your existing .resx file

 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();
Share:
14,015

Related videos on Youtube

Ankit Goel
Author by

Ankit Goel

Updated on September 14, 2022

Comments

  • Ankit Goel
    Ankit Goel over 1 year

    I am using the following code to generate resource file programmatically.

    ResXResourceWriter resxWtr = new ResXResourceWriter(@"C:\CarResources.resx");
    resxWtr.AddResource("Title", "Classic American Cars");
    resxWtr.Generate();
    resxWtr.Close();
    

    Now, i want to modify the resource file crated from above code. If i use the same code, the existing resource file gets replaced. Please help me modify it without loosing the existing contents.

    Best Regards, Ankit

  • Ankit Goel
    Ankit Goel over 10 years
    I don't want to re-write existing resource file, i just want to append new resources to it. Is there any other way?