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

Как это исправить - C# winform save&load textboxvalues


извините за мой английский..
я сделал кнопку для сохранения значений текстовых полей в xml-файл.
я сделал кнопку для загрузки из xml в каждый текстовый ящик, который сохранялся раньше

Моя проблема заключается в том, что когда я нажимаю кнопку loadbutton один раз, да, она загружает все значения, которые я сохранил в xml, в каждый textboxs, но после этого я хотел изменить некоторые значения в одном из всех textboxs и снова нажать кнопку save, и это всплывающее окно говорит:

"Процесс не может получить доступ к файлу 'data.xml-потому что его использует другой процесс."

поэтому я не могу изменить данные после загрузки..
пожалуйста, могу ли я получить решение, чтобы заставить его работать! спасибо

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

Savebutton
private void btnsave_Click_1(object sender, EventArgs e)
        {
           
                    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"))
            {
                XmlSerializer xs = new XmlSerializer(typeof(Information));
                FileStream read = new FileStream("data.xml", FileMode.Open, FileAccess.Read, FileShare.Read);
                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;
            }
        }


SaveXML.в CS
using System;
using System.Collections.Generic;
using System.Linq;
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();
        }
    }
}


Информация.в 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; }
        }

        
    }
}

1 Ответов

Рейтинг:
11

OriginalGriff

Просто: ваше приложение использует его, поэтому его нельзя открыть, так как оно занято.
Когда вы открываете поток, вы отвечаете за очистку позади себя - закрытие потока и удаление объекта, который его открыл.
Самый простой способ-это использовать using блок:

if (File.Exists("data.xml"))
    {
    XmlSerializer xs = new XmlSerializer(typeof(Information));
    using (FileStream read = new FileStream("data.xml", FileMode.Open, FileAccess.Read, FileShare.Read))
        {
        Information info = (Information)xs.Deserialize(read);
        ...
        }  // The stream is closed here for you, and goes out of scope.
    }


Muhammad nur Ihsan

Спасибо человек я застрял там найти решение около 5 часов xD

OriginalGriff

Всегда пожалуйста!