0

最近、C# プログラムで XML ドキュメントを使用するアプリケーションの開発を開始しました。最初はすべて問題なく動作していましたが、コードを編集し、XML が削除されたり破損したりした場合に備えてプログラムに機能を追加したため、プログラムが適切に機能しなくなりました。

次のコードは、データを送信して XML に転送するときに使用されます。

    private void doneCreate_Click(object sender, EventArgs e)
    {
        //Initialize new XMLDocument class.
        XmlDocument XmlDoc = new XmlDocument();

        //See if the card data file is there, if not, create it.
        if (File.Exists(xmlPath) == false)
        {
            using (FileStream createFile = File.Create(xmlPath))
            {
                Byte[] FileData = new UTF8Encoding(true).GetBytes(toBase64("<studycards></studycards>"));
                // Add some information to the file.
                createFile.Write(FileData, 0, FileData.Length);
                createFile.Close();
            }

            XMLData = "<studycards></studycards>";
        }
        else
        {
            XMLData = readXML();

            if (XMLData == "")
            {
                XMLData = "<studycards></studycards>";
            }
            else
            {
                XMLData = fromBase64(XMLData);
            }
        }

        XmlDoc.LoadXml(XMLData);

        XmlElement Group = XmlDoc.CreateElement("Group", null);
        XmlAttribute Group_Attr = XmlDoc.CreateAttribute("Name");
        Group_Attr.Value = groupName.Text;

        Group.Attributes.Append(Group_Attr);

        foreach (string[] Card in CardData)
        {
            try
            {
                FrontData = Card[0].ToString();
                BackData = Card[1].ToString();

                NewCard = XmlDoc.CreateElement("Card");
                FrontElement = XmlDoc.CreateElement("Front");
                FrontElement.InnerText = FrontData;

                BackElement = XmlDoc.CreateElement("Back");
                BackElement.InnerText = BackData;

                NewCard.AppendChild(FrontElement);
                NewCard.AppendChild(BackElement);
                Group.AppendChild(NewCard);
            }

            catch
            {
                break;
            }
        }

        XmlDoc.DocumentElement.AppendChild(Group);

        XmlTextWriter write = new XmlTextWriter(xmlPath, null);
        write.Formatting = Formatting.Indented;
        XmlDoc.Save(write); 
    }

アプリケーションで [完了] をクリックしようとすると、次の例外が表示されます。

別のプロセスで使用されているため、プロセスはファイル 'C:\Users\Toshiba\documents\visual studio 2010\Projects\StudyCards\StudyCards\bin\Debug\Resources\card_data.xml' にアクセスできません。

解決策はありますか?

4

1 に答える 1

0

これは、少なくとも問題の一部である可能性があります。

XmlTextWriter write = new XmlTextWriter(xmlPath, null);
write.Formatting = Formatting.Indented;
XmlDoc.Save(write);

ライターを閉じることは決してないので、ファイルを開いたままにしておくことを期待しています。これにより、ファイナライザーが起動するまで、今後のファイルを開く試みが停止します。

あるいはreadXML()、あなたが示していない の一部である可能性があります。繰り返しますが、ファイルを開いたままにしておくと、問題が発生します。

于 2012-09-12T20:20:26.470 に答える