0

当我尝试将节点附加到资源文件时遇到问题。我首先删除文件: - .resx 并创建一个新文件: - File.Create( .resx).Close();

我有一个迭代方法应该在该文件中写入一个节点,但结果是一个仅包含最后一个节点的资源文件。我在这个论坛上搜索了一个解决方案,发现解决方案必须是我读入文件中的元素/节点(从一开始就为空),然后再次写入它们,最后是我的新节点。然后我做这个迭代。它根本没有效率,但因为在这种情况下它并不重要,我可以忍受。但是,我遇到了文件已经在其他进程中打开的问题。我做了一些更改,现在我遇到了一个问题,我无法添加已添加的节点。需要一些帮助。这是我的代码:

private void WriteToResxFile(List<CompleteString> listStrings)
    {
        ResXResourceWriter writer;
        ResXResourceReader reader;
        IDictionaryEnumerator readerNode;
        ResXDataNode node;
        FileInfo fileInfo;
        Hashtable resourceEntries;
        System.ComponentModel.Design.ITypeResolutionService typeres;
        string text;

        RemoveExistingResxFiles();

        foreach (Language lang in languages)    
        {
            foreach (ResourceFile file in resourcefilesPaths)
            {
                fileInfo = new FileInfo(file.mPath);
                fileInfo.IsReadOnly = false;
                reader = new ResXResourceReader(file.mPath);

                reader.UseResXDataNodes = true;
                fileInfo.IsReadOnly = false;
                typeres = null;

                foreach (CompleteString completeString in listStrings)
                {
                    if (completeString.mFileName.Equals(file.mResxName))
                    {
                        int index = file.mPath.IndexOf(".");
                        if (lang.mResx.Equals(file.mPath.Substring(index)))
                        {
                            writer = new ResXResourceWriter(file.mPath);
                            if (reader != null && fileInfo.Length != 0)
                            {
                                foreach (DictionaryEntry d in reader)
                                {
                                    //Read from file:
                                    resourceEntries = new Hashtable(); 
                                    string val = "";
                                    if (d.Value == null)
                                        resourceEntries.Add(d.Key.ToString(), "");
                                    else
                                    {
                                        val = ((ResXDataNode)d.Value).GetValue(typeres).ToString();
                                        resourceEntries.Add(d.Key.ToString(), val);

                                    }

                                    //Write (with read to keep xml file order)
                                    ResXDataNode dataNode = (ResXDataNode)d.Value;

                                    writer.AddResource(dataNode);

                                }
                                reader.Close();
                            }
                            text = CorrectStringDependedOnLangauge(completeString, lang);
                            node = new ResXDataNode(completeString.mStringName, text);
                            node.Comment = completeString.mStringType;
                            fileInfo.IsReadOnly = false;
                            writer.AddResource(node);
                            writer.Close();
                        }
                    }
                }                  

            }
        }

解决方案:

           foreach (Language lang in languages)    
        {
            foreach (ResourceFile file in resourcefilesPaths)
            {
                fileInfo = new FileInfo(file.mPath);
                fileInfo.IsReadOnly = false;
                fileInfo.IsReadOnly = false;
                typeres = null;

                foreach (CompleteString completeString in listStrings)
                {
                    if (completeString.mFileName.Equals(file.mResxName))
                    {
                        int index = file.mPath.IndexOf(".");
                        if (lang.mResx.Equals(file.mPath.Substring(index)))
                        {
                            reader = new ResXResourceReader(file.mPath);
                            reader.UseResXDataNodes = true;
                            writer = new ResXResourceWriter(file.mPath);
                            if (reader != null && fileInfo.Length != 0)
                            {    
                                foreach (DictionaryEntry d in reader)
                                {
                                    resourceEntries = new Hashtable(); 
                                    string val = "";
                                    if (d.Value == null)
                                        resourceEntries.Add(d.Key.ToString(), "");
                                    else
                                    {
                                        val = ((ResXDataNode)d.Value).GetValue(typeres).ToString();
                                        resourceEntries.Add(d.Key.ToString(), val);

                                    }
                                    ResXDataNode dataNode = (ResXDataNode)d.Value;
                                    writer.AddResource(dataNode);
                                }          
                            }
                            reader.Close();
                            text = CorrectStringDependedOnLangauge(completeString, lang);
                            node = new ResXDataNode(completeString.mStringName, text);
                            node.Comment = completeString.mStringType;
                            fileInfo.IsReadOnly = false;
                            writer.AddResource(node);
                            writer.Close();
                        }
                    }
                }  
            }
        }
    }
4

0 回答 0