2013-09-05 32 views
5

Tôi đang sử dụng mã sau để tạo tệp tài nguyên theo lập trình.Sửa đổi tệp tài nguyên hiện có theo lập trình

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

Bây giờ, tôi muốn sửa đổi tệp tài nguyên được trích từ mã trên. Nếu tôi sử dụng cùng một mã, tệp tài nguyên hiện có sẽ được thay thế. Xin hãy giúp tôi sửa đổi nó mà không mất nội dung hiện có.

Best Regards, Ankit

Trả lời

0

Đây là một chức năng mà có thể giúp bạn chỉnh sửa các tập tin tài nguyên.

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(); 

} 

link tham khảo here

+1

Tôi không muốn để viết lại tệp tài nguyên hiện có, tôi chỉ muốn chắp thêm tài nguyên mới vào nó. Còn cách nào khác không? –

2
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(); 
     } 
    } 
0

tôi đã cùng một vấn đề này giải quyết nó:

này sẽ gắn liền với các file resx hiện tại của bạn

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(); 
+0

Bạn có thể đọc và ghi vào cùng một tệp cùng một lúc? –

Các vấn đề liên quan