0

これは本当に奇妙なものです。XML ファイルを書き込むアプリを作成していました。ただし、場合によっては、ファイルが作成/上書きされないことがあります。

書き込みに失敗する原因となる特定のイベントを追跡することができ、それをスタンドアロン プログラムに分離しました。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        bool doFileOpenFirst = false;

        if (doFileOpenFirst)
        {
            OpenFileDialog dialog = new OpenFileDialog();

            dialog.CheckFileExists = true;
            dialog.Filter = "Image files|*.bmp;*.jpg;*.png";

            dialog.ShowDialog();
        }

        // Just write a trivial XML file
        XmlDocument doc = new XmlDocument();
        XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "UTF-8", null);
        doc.AppendChild(dec);// Create the root element

        XmlElement root = doc.CreateElement("Database");
        doc.AppendChild(root);

        doc.Save("Trivial.xml");
    }
}

これを実行すると、最初は動作することがわかります。doFileOpenFirst を true にします。XML を書き込む前に、ファイルを開くためのダイアログが表示されます。このダイアログを使用してファイル (「Trivial.xml」以外の任意のファイル) を選択すると、その後の XML 保存は失敗します。静かに。OpenFileDialog でキャンセルを押すと、保存は正常に機能します。

ファイル ハンドルに問題がある可能性がありますが、回避策はありますか? OpenFileDialog の Dispose を強制しても役に立たないことがわかります。

4

3 に答える 3

1

ダイアログを開いてxmlをフォームのLoadイベントに保存するこれらのコードを配置する必要があると思います。

于 2012-10-07T13:09:23.423 に答える
1

ダイアログ (OpenFileDialog) と XML 保存コードは互いに独立しています。そのため、ダイアログを表示してもしなくても、特にダイアログで他のファイルを選択した場合に、XML 保存で問題が発生することはありません。

また、あなたを助けるために、私はあなたのコードとステップをチェックしました.XMLはOpenFileDialogの有無にかかわらず保存されています. したがって、問題がファイルを開くダイアログに依存していないとします。ご提供いただいたサンプルでは問題ありません。

于 2012-10-07T13:17:49.150 に答える
1

うまくいくようです!私は試して、想定どおりに働きました。

ランダムな画像ファイルを開くのに問題はありません:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml;

namespace StackOverflow
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        bool doFileOpenFirst = true;

        if (doFileOpenFirst)
        {
            OpenFileDialog dialog = new OpenFileDialog();

            dialog.CheckFileExists = true;
            dialog.Filter = "Image files|*.bmp;*.jpg;*.png";

            dialog.ShowDialog();
        }

        // Just write a trivial XML file
        XmlDocument doc = new XmlDocument();
        XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "UTF-8", null);
        doc.AppendChild(dec);// Create the root element

        XmlElement root = doc.CreateElement("Database");
        doc.AppendChild(root);

        doc.Save("Trivial.xml");
    }
}
}
于 2012-10-07T13:21:44.517 に答える