-1

大量の XML ファイルをアプリケーションにインポートした後、XML ドキュメント クラスを使用して変更を加えようとしました。このため、変更を行うメソッドをいくつか作成しました。

問題は、正常に動作している開始方法であり、2番目の方法になると、「ファイルはすでに別のプロセスを使用しています」のような 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; }
    }

ありがとう、ラージ

4

1 に答える 1

0

アプリケーションで同じファイルを 2 回開いている可能性があります。再度開く前に、閉じる必要があります (または開いたままにし、再度開かずに同じドキュメントで作業します)。

これを実装する方法についてのヘルプが必要な場合は、アドバイスを提供できるように、より多くのコードを提示してください。

于 2013-04-05T10:03:38.447 に答える