2013-04-05 102 views
0

將大量XML文件導入到應用程序後,我嘗試使用XML文檔類對其進行修改,爲此我創建了幾個方法來執行修改。保存C#中的XML文檔時出現System.IO異常

事情是開始的方法,它的工作正常,當談到第二個它顯示System.IO異常,如「文件已在使用另一個進程」。

所以任何人都可以幫我解決這個問題。

示例代碼我在做什麼:

Method1(fileList); 
Method2(fileList); 
Method3(fileList); 

    private void Method1(IList<RenamedImportedFileInfo> fileList) 
    { 
      try 
     { 

      string isDefaultAttribute = Resource.Resources.ImportIsDefaultAttribute; 
      string editorsPath = editorsFolderName + Path.DirectorySeparatorChar + meterType; 
      string profilesPath = profileFolderName + Path.DirectorySeparatorChar + meterType; 
      string strUriAttribute = Resource.Resources.ImportUriAttribute; 

      foreach (RenamedImportedFileInfo renameInfo in fileList) 
      { 
       if (renameInfo.NewFilePath.ToString().Contains(editorsPath) && (renameInfo.IsProfileRenamed != true)) 
       { 
        var xmldoc = new XmlDocument(); 
        xmldoc.Load(renameInfo.NewFilePath); 

        if (xmldoc.DocumentElement.HasAttribute(isDefaultAttribute)) 
        { 
         xmldoc.DocumentElement.Attributes[isDefaultAttribute].Value = Resource.Resources.ImportFalse; 
        } 

        XmlNodeList profileNodes = xmldoc.DocumentElement.GetElementsByTagName(Resource.Resources.ImportMeasurementProfileElement); 
        if (profileNodes.Count == 0) 
        { 
         profileNodes = xmldoc.DocumentElement.GetElementsByTagName(Resource.Resources.ImportBsMeasurementProfileElement); 
        } 
        if (profileNodes.Count > 0) 
        { 
         foreach (RenamedImportedFileInfo profileName in oRenamedImportedFileList) 
         { 
          if (profileName.NewFilePath.ToString().Contains(profilesPath)) 
          { 
           if (string.Compare(Path.GetFileName(profileName.OldFilePath), Convert.ToString(profileNodes[0].Attributes[strUriAttribute].Value, CultureInfo.InvariantCulture), StringComparison.OrdinalIgnoreCase) == 0) 
           { 
            profileNodes[0].Attributes[strUriAttribute].Value = Path.GetFileName(profileName.NewFilePath); 
            renameInfo.IsProfileRenamed = true; 
            break; 
           } 
          } 
         } 
        } 

        xmldoc.Save(renameInfo.NewFilePath); 
        xmldoc = null; 
        profileNodes = null; 
       } 
      } 
      oRenamedImportedFileList = null; 
     } 
     catch (NullReferenceException nullException) { LastErrorMessage = nullException.Message; } 
    } 

感謝, 拉吉

+0

如果您演示如何管理XML文件,這將有所幫助。 – 2013-04-05 10:02:36

+4

沒有任何代碼很難分辨,但我敢打賭,在第一次編輯之後你並沒有處理文件,所以在GC掃描之前它不會被關閉...... – 2013-04-05 10:02:51

+0

你將不得不發佈你的代碼。很明顯,你只是缺少一兩個命令,但是如果沒有你現在使用的代碼,我們怎麼知道世界上的? – 2013-04-05 10:06:11

回答

0

你可能在你的應用程序中打開同一個文件。在您再次打開它之前,您必須關閉它(或者將其打開並在不打開的情況下處理同一文檔)。

有關如何實現此目的的幫助,請向我們展示更多代碼,以便我們可以給您提供建議。

+0

如何關閉? – user1805169 2013-04-05 10:12:43