2010-06-01 170 views
2

我試圖從字符串字典創建一個.resx文件。幸運的是.Net框架有一個ResXResourceWriter類。唯一的問題是,當我使用下面的代碼創建文件時,我生成的resx文件的最後幾行缺少。我檢查了我的字典,它包含我期望的所有字符串對。ResXResourceWriter截斷文件結尾

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

不幸的是,這是一個有點難以顯示整個RESX文件,因爲它具有2198(應該有2222)線,但這裏是最後的一點:

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

BTW,請注意文件在「LangAlign_Return」中的「n」結尾截斷。該字符串應爲「LangAlign_ReturnToWorkspace」。該文件也應該在2222行結束。

回答

3

試試這個:

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

您需要調用Dispose()上的作家。 :)

0

「LangAlign_ReturnToWorkspace」實際上是這樣說的還是「LangAlign_Return ToWorkspace」?

(與返回和ToWorkspace之間的空間或者一個非打印字符?)

也許這是造成elememt名字被錯誤地產生?

只是一個想法。

+0

我只是再次檢查了這個建議,但在此字符串之前或之後沒有非打印字符。當我讀到你的建議時,我有一半認爲這是問題。 謝謝, Aaron – 2010-06-01 20:42:15

+0

啊,太糟糕了,值得一試。如果您只將該值放入字典中,它是否會出現相同的錯誤? – Andy 2010-06-01 20:45:01

+0

我編輯了我用來創建Dictionary的XML文件(確保任何奇怪的字符保留)到犯規條目。我還保留了所有低於此值的其他條目。該文件在其他位置和XML屬性中間被切斷。所以,我知道這不是我的字符串,因爲它在由ResXResourceWriter類創建的位置切斷。嗯,我想知道這是怎麼回事。我的代碼不能更簡單。 – 2010-06-01 21:09:52