3

テキストボックス入力を使用して xml ファイルの内容を編集するアプリケーションを構築しています。C# で新しい xml ファイルを作成する基本的な概念は理解しましたが、ファイルを更新しようとするとエラーが発生し続けます。助けてください?

(私は多くの助けを必要とする新しい開発者です。他に何か投稿する必要がある場合は、コメントを追加してください。)

編集: これが私の問題です: doc.CreateElement(). ファイルは更新されません。保存ボタンをクリックしても、ファイル自体は更新されません。

これは私が試したことです:

ファイル名.xml :

 <ApplicationPreferences>
   <Facility>2400</Facility> 
   <FacilityName>Somewhere</FacilityName> 
 </ApplicationPreferences>

コード:

namespace WIPSControlPanel
{
[Serializable]
public class ApplicationPreferences 
{
    private const string CONFIG_FILE_NAME = "fileName.xml";
    private string _facility = String.Empty;
    private string _facilityName = String.Empty;
    private string _preferencesPath = CONFIG_FILE_NAME;
    private string _appURI = String.Empty;

    [XmlElement]
    public string FacilityName
    {
        get { return _facilityName; }
        set { _facilityName = value; }
    }

    [XmlElement]
    public string Facility
    {
        get { return _facility; }
        set { _facility = value; }
    }

     public string AppURI
    {
        get { return _appURI; }
    }

    //Constructor
    public ApplicationPreferences()
    {
    }

    /// <summary>
    /// Constructs the class
    /// </summary>
    public ApplicationPreferences(string pathName)
    {

        _preferencesPath = Path.Combine(pathName, CONFIG_FILE_NAME);

    }

   public void Save()
    {
        XmlSerializer serializer = new XmlSerializer(typeof(ApplicationPreferences));
        XmlWriter writer = GetXmlWriter();
        serializer.Serialize(writer, this);
    }

    public void Load()
    {
        XmlSerializer serializer = new XmlSerializer(typeof(ApplicationPreferences));
        XmlReader reader = GetXmlReader();
        ApplicationPreferences newConfig = (ApplicationPreferences)serializer.Deserialize(reader);


        if (newConfig != null)
        {
            this.FacilityName = newConfig.FacilityName;
            this.Facility = newConfig.Facility;
        }
    }

private XmlReader GetXmlReader()
    {
        XmlReaderSettings settings = new XmlReaderSettings();

        return XmlReader.Create(_preferencesPath, settings);
    }


    private XmlWriter GetXmlWriter()
    {
        if (CONFIG_FILE_NAME != null)
        {
            XmlWriterSettings settings = new XmlWriterSettings();

            return XmlWriter.Create(Path.Combine(Path.GetDirectoryName(@"\\server"), CONFIG_FILE_NAME));
        }
    }
 }


namespace WIPSControlPanel
{

   public partial class MainWindow : Window, INotifyPropertyChanged
   {
    #region Private Variables
    private ApplicationPreferences _configFile = new ApplicationPreferences();
    }

   public ApplicationPreferences ConfigFile
    {
        get { return _configFile; }

        set
        {
            _configFile = value;
            OnPropertyChanged("ConfigFile");
        }
    }

    public MainWindow()
    {
        InitializeComponent();
        Loaded += fileLoad;
        this.DataContext = this;
        this.ConfigFile = new ApplicationPreferences(@"\\server");
        this.ConfigFile.Load();
        LoadAvailableOperations(this.ConfigFile.Facility);
        UpdateOperationDescriptions(this.ConfigFile);
    }

    private void butGenSave_Click(object sender, RoutedEventArgs e)
    {
        XmlDocument doc = new XmlDocument();
        doc.LoadXml("WIPSConfig");

        XmlWriter writer;

        XElement newElement = doc.CreateElement(
            new XElement("Facility", txtFacility.Text),
            new XElement("FacilityName", txtFacilityName.Text),
            new XElement("ApplicationStatus", txtStatus.Text),
            (new XElement("RefreshInterval", txtRefreshInterval.Text)));
        doc.Save(writer);

        writer = new XmlTextWriter("WIPSConfig.xml", null);
        writer.WriteStartElement("ApplicationPreferences");
        writer.WriteEndElement();
        doc.Save(writer);
        writer.Close();

    }
 }

テキスト ボックスの XAML :

 <TextBox x:Name="txtFacilityName"
                                         Grid.Column="1"
                                         Margin="5,5,0,5"
                                         Width="129"
                                         HorizontalAlignment="Left"
                                         Text="{Binding ConfigFile.FacilityName}" />
<TextBox x:Name="txtFacility"
                                         Grid.Column="1"
                                         Grid.Row="1"
                                         Width="129"
                                         Margin="5,5,0,5"
                                         HorizontalAlignment="Left"
                                         Text="{Binding ConfigFile.Facility}" />
4

1 に答える 1

0

すぐに、ある場所でファイルを作成し、別の場所から読み取ろうとしているように見えます。

// _preferencesPath ~= @"\\srvusadcweb01\wips_test\Cortland\fileName.xml":
XmlReader.Create(_preferencesPath, settings);

XmlWriter.Create(Path.Combine(Path.GetDirectoryName(@"\\server"), CONFIG_FILE_NAME));

@"\\server"物事をもう少し「一般的」にするための単なる編集でない限り。

編集

XmlWriter.Create()を使用して既存のファイルを上書きしようとしていますか? もしそうなら、あなたはこれをチェックアウトしたいかもしれません:
ファイルへの C# シリアル化、存在する場合は上書き

XmlWriter.Create(File.Create(fileName), settings)
于 2012-12-13T18:27:17.870 に答える