Muhammad nur Ihsan Ответов: 1

Как создать кнопку для сохранения значения texboxes в XML и загрузки его обратно с помощью кнопок? С#


во-первых, я действительно Новичок в этом и новичок с c# извините за мой английский..ну, я собираюсь сделать приложение для школьного проекта, Я создаю простое приложение cashregister..

поэтому я хотел сделать кнопку для сохранения каждого текстового/числового значения в текстовых полях, которые я создал
программа работает, но я получаю эту ошибку после нажатия кнопки Сохранить, которую я создал
An unhandled exception of type 'System.ArgumentException' occurred in mscorlib.dll
Absolute path information is required. occurred

на этой линии
FileIOPermission filePermission =
                    new FileIOPermission(FileIOPermissionAccess.AllAccess, "data.xml");


Что я уже пробовал:

форма form1.в CS
кнопка сохранения
private void btnsave_Click_1(object sender, EventArgs e)
       {
           if (File.Exists("data.xml"))
           {
               File.SetAttributes("data.xml", FileAttributes.Normal);
               FileIOPermission filePermission =
                   new FileIOPermission(FileIOPermissionAccess.AllAccess, "data.xml");

               using (FileStream stream = new FileStream("data.xml", FileMode.Create))
               {
                   try
                   {
                       Information info = new Information();
                       info.Data1 = txtBasoSU.Text;
                       info.Data2 = txtBasoC.Text;
                       info.Data3 = txtBasoM.Text;
                       info.Data4 = txtBasoB.Text;
                       info.Data5 = txtMieA.Text;
                       info.Data6 = txtMieAB.Text;
                       info.Data7 = txtServisMinuman.Text;
                       info.Data8 = txtServisMakanan.Text;
                       info.Data9 = txtServisBungkus.Text;
                       info.Data10 = txtTotalSpajak.Text;
                       info.Data11 = txtTotalPajak.Text;
                       info.Data12 = txtTotal.Text;

                       SaveXML.SaveData(info, "data.xml");

                   }
                   catch (Exception ex)
                   {
                       MessageBox.Show(ex.Message);
                   }
               }
           }
       }

кнопку Загрузить
private void btnload_Click(object sender, EventArgs e)
        {
            if (File.Exists("data.xml"))
            {
                using (var stream = new FileStream("data.xml", FileMode.Open))
                {
                    var xs = new XmlSerializer(typeof(Information));
                    FileStream read = new FileStream("data.xml", FileMode.Open, FileAccess.ReadWrite);
                    Information info = (Information)xs.Deserialize(read);
                    // FileStream read = new FileStream("data.xml", FileMode.Open, FileAccess.ReadWrite);
                    //Information info = (Information)xs.Deserialize(read);

                    txtBasoSU.Text = info.Data1;
                    txtBasoC.Text = info.Data2;
                    txtBasoM.Text = info.Data3;
                    txtBasoB.Text = info.Data4;
                    txtMieA.Text = info.Data5;
                    txtMieAB.Text = info.Data6;

                    txtServisMinuman.Text = info.Data7;
                    txtServisMakanan.Text = info.Data8;
                    txtServisBungkus.Text = info.Data9;
                    txtTotalSpajak.Text = info.Data10;
                    txtTotalPajak.Text = info.Data11;
                    txtTotal.Text = info.Data12;
                }
            }
        }


информация.в CS
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;

namespace CS_Sistem_Managemen_Restoran
{
    public class Information
    {
        private string data1;
        private string data2;
        private string data3;
        private string data4;
        private string data5;
        private string data6;

        private string data7;
        private string data8;
        private string data9;
        private string data10;
        private string data11;
        private string data12;
        
        
        public string Data1
        {
            get { return data1; }
            set { data1 = value; }
        }

        public string Data2
        {
            get { return data2; }
            set { data2 = value; }
        }
        public string Data3
        {
            get { return data3; }
            set { data3 = value; }
        }

        public string Data4
        {
            get { return data4; }
            set { data4 = value; }
        }

        public string Data5
        {
            get { return data5; }
            set { data5 = value; }
        }

        public string Data6
        {
            get { return data6; }
            set { data6 = value; }
        }

        public string Data7
        {
            get { return data7; }
            set { data7 = value; }
        }

        public string Data8
        {
            get { return data8; }
            set { data8 = value; }
        }

        public string Data9
        {
            get { return data9; }
            set { data9 = value; }
        }

        public string Data10
        {
            get { return data10; }
            set { data10 = value; }
        }

        public string Data11
        {
            get { return data11; }
            set { data11 = value; }
        }

        public string Data12
        {
            get { return data12; }
            set { data12 = value; }
        }

        
    }
}


saveXML.в CS
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;
using System.IO;

namespace CS_Sistem_Managemen_Restoran
{
    public class SaveXML
    {
        public static void SaveData(object obj, string filename)
        {
            XmlSerializer sr = new XmlSerializer(obj.GetType());
            TextWriter writer = new StreamWriter(filename);
            sr.Serialize(writer, obj);
            writer.Close();
        }
    }
}

1 Ответов

Рейтинг:
10

OriginalGriff

Ошибка вполне объяснима, если вы посмотрите на нее.

Absolute path information is required

Идет по этой линии:
FileIOPermission filePermission =
                    new FileIOPermission(FileIOPermissionAccess.AllAccess, "data.xml");
Потому что ... data.xml-это ... относительный путь - и это относительно того, где в данный момент работает текущее приложение. Библиотека DLL не знает, где это находится, или, по крайней мере, не уверена, что знает, поэтому она специально проверяет абсолютное местоположение, когда вы указываете имя файла.

Это все равно что сидеть в библиотеке и разговаривать с кем-то по телефону. Когда вы говорите им, что читаете "эту книгу", это не помогает им прийти и посмотреть на нее, потому что "эта книга" - относительный адрес: вам нужно сказать: "этаж 3, IT-секция, Ряд 14, полка 3," основы программирования OOPs"", чтобы предоставить им абсолютный адрес, чтобы они могли подняться по лестнице и найти его.

Так что замените "data.xml" с его абсолютным адресом: @"C:\I keep stuff here\XML files\data.xml-и он должен избавиться от ошибки.

Кстати, взгляните на это: Где я должен хранить свои данные?[^] - это может быть немного продвинутым для вас, но он предлагает некоторые разумные места для хранения данных, и показывает вам, как получить путь к ним.