2010-06-01 5 views
2

J'essaie de créer un fichier .resx à partir d'un dictionnaire de chaînes. Heureusement, le framework .Net a une classe ResXResourceWriter. Le seul problème est que lorsque je crée le fichier en utilisant le code ci-dessous, les dernières lignes de mon fichier resx généré sont manquantes. J'ai vérifié mon dictionnaire et il contient toutes les paires de chaînes que j'attends.ResXResourceWriter Coupe la fin du fichier

public void ExportToResx(Dictionary<string,string> resourceDictionary, string fileName) 
{ 
    var writer = new ResXResourceWriter(fileName); 

    foreach (var resource in resourceDictionary) 
    { 
     writer.AddResource(resource.Key, resource.Value); 
    } 
} 

Malheureusement, il est un peu difficile de montrer l'ensemble du fichier resx car il a 2198 (devrait avoir 2222) lignes, mais voici le dernier petit:

... 
2195 <data name="LangAlign_ReportIssue" xml:space="preserve"> 
2196  <value>Report an Issue</value> 
2197 </data> 
2198 <data name="LangAlign_Return 

BTW, notez que la Le fichier se coupe juste à la fin de ce "n" dans "LangAlign_Return". La chaîne devrait lire "LangAlign_ReturnToWorkspace". Le fichier devrait également se terminer à la ligne 2222.

Répondre

3

Essayez ceci:

public void ExportToResx(Dictionary<string,string> resourceDictionary, string fileName) 
{ 
    using(var writer = new ResXResourceWriter(fileName)) 
    { 
     foreach (var resource in resourceDictionary) 
     { 
      writer.AddResource(resource.Key, resource.Value); 
     } 
    } 
} 

vous deviez appeler Dispose() sur l'écrivain. :)

0

Est-ce que "LangAlign_ReturnToWorkspace" le dit réellement, ou est-ce "LangAlign_Return ToWorkspace"?

(avec un espace ou peut-être un caractère non-impression entre le rendement et ToWorkspace?)

Peut-être est à l'origine le nom de elememt à générer à tort?

Juste une idée.

+0

Je viens de vérifier cette suggestion, mais il n'y a aucun caractère non-impression avant ou après dans cette chaîne. Quand j'ai lu votre suggestion, je m'attendais à moitié que ce soit le problème. Merci, Aaron –

+0

Ah, dommage, ça vaut le coup d'essayer. Présente-t-il la même erreur si vous ne mettez que cette valeur dans le dictionnaire? – Andy

+0

J'ai édité le fichier XML que j'ai utilisé pour créer le dictionnaire (en veillant à ce qu'il reste des caractères étranges) jusqu'à l'entrée incriminée. J'ai également gardé toutes les autres entrées qui étaient en dessous de celle-ci. Le fichier a été coupé à un endroit différent et au milieu d'un des attributs XML. Donc, je sais que ce ne sont pas mes chaînes car elles sont coupées à un endroit créé par la classe ResXResourceWriter. Hmmm, je me demande ce qui se passe avec ça. Mon code ne pouvait pas être plus simple. –

Questions connexes