StreamWriter和StreamReader以及阵列问题

时间:2018-12-12 21:23:27

标签: c# arrays

I have this very long code, which is works more or less.

问题在于它没有写入文本文件,并且当我打开FrmDc FrmMarvel时也会打开。显示我关闭FrmDc Index was outside the bounds of the arrays消息时的某些原因。有什么事吗 读取也或多或少地起作用,因为当我将一些信息写入文本框,并且源文件包含详细信息时,它将复制现有文本。

我想我可以删除部分代码,但是我不确定是哪一部分。

namespace Kepregenybolt
    {
        public partial class Form1 : Form
        {
            List<CsMarvel> kLista = new List<CsMarvel>();
            StreamWriter sW;

            public Form1()
            {
                InitializeComponent();
                cbKiado.Items.Add("Marvel");
                cbKiado.Items.Add("DC");
                try
                {
                    StreamReader sR = new StreamReader("kepregenyek.txt", Encoding.UTF8);
                    while (!sR.EndOfStream)
                    {
                        string sor = sR.ReadLine();
                        string[] s = sor.Split(';');
                        if (s.Length == 5)
                        {
                            CsMarvel h = new CsMarvel(s[0],
                                s[1],
                                s[2],
                                Convert.ToInt32(s[3]),
                                Convert.ToInt32(s[4]));
                            kLista.Add(h);
                        }
                        else
                        {
                            CsDc h = new CsDc(s[0],
                               s[1],
                               s[2],
                               Convert.ToInt32(s[3]),
                               Convert.ToInt32(s[4]),
                               s[5]);
                            kLista.Add(h);
                        }
                    }
                    sR.Close();
                    foreach (CsMarvel item in kLista)
                    {
                        listBox1.Items.Add(item.listába());
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }

            private void cbKiado_SelectedIndexChanged(object sender, EventArgs e)
            {
                FrmMarvel a = new FrmMarvel(kLista);

                if (cbKiado.Text.Equals("Marvel")) ;



                a.ShowDialog();
                try
                {
                    StreamReader sR = new StreamReader("kepregenyek.txt", Encoding.UTF8);
                    while (!sR.EndOfStream)
                    {
                        string sor = sR.ReadLine();
                        string[] s = sor.Split(';');
                        CsMarvel l = new CsMarvel(s[0], s[1], s[2], Convert.ToInt32(s[3]), Convert.ToInt32(s[4]));
                        kLista.Add(l);
                    }

                    sR.Close();
                    foreach (CsMarvel item in kLista)
                    {
                        listBox1.Items.Add(item.listába());
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                } 

                if (cbKiado.Text.Equals("DC"));
                {
                    FrmDc b = new FrmDc(kLista);
                    b.ShowDialog();
                    try
                    {
                        StreamReader sR = new StreamReader("kepregenyek.txt", Encoding.UTF8);
                        while (!sR.EndOfStream)
                        {
                            string sor = sR.ReadLine();
                            string[] s = sor.Split(';');
                            CsDc l = new CsDc(s[0], s[1], s[2], Convert.ToInt32(s[3]), Convert.ToInt32(s[4]), s[5]);
                            kLista.Add(l);
                        }

                        sR.Close();
                        foreach (CsDc item in kLista)
                        {
                            listBox1.Items.Add(item.listába());
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);

                    }
                }
            }


            private void FrmMarvel_FormClosing(object sender, FormClosedEventArgs e)
            {

                sW = new StreamWriter("kepregenyek.txt", false, Encoding.UTF8);
                foreach (CsMarvel item in kLista)
                {
                    sW.WriteLine(item.fájlba());
                }
                sW.Close();
            }

            private void btnClose_Click(object sender, EventArgs e)
            {
                this.Close();
            }
        }
    }

CsMarvel如下:

    public class CsMarvel
        {
            string cim;
            string iro;
            string rajzolo;
            int megjelenes;
            int ar;




            public CsMarvel(string cim, string iro, string rajzolo, int megjelenes, int ar)
            {
                this.cim = cim;
                this.iro = iro;
                this.rajzolo = rajzolo;
                this.megjelenes = megjelenes;
                this.ar = ar;

            }
            public virtual string fájlba()
            {
                return this.cim + ";" + this.iro + ";" + this.rajzolo + ";" + this.megjelenes + ";" + this.ar;
            }
            public virtual string listába()
            {
                return this.cim + ":" + this.iro + " " + this.rajzolo + " kiadó Kiadva:" + this.megjelenes + " " + this.ar + " Ft";
            }
            public string Cim
            {
                get
                {
                    return cim;

                }
                set
                {
                    cim = value;
                }
            }
            public string Iro
            {
                get
                {
                    return iro;

                }
                set
                {
                    iro = value;
                }
            }
            public string Rajzolo
            {
                get
                {
                    return rajzolo;

                }
                set
                {
                    rajzolo = value;
                }
            }
            public int Megjelenes
            {
                get
                {
                    return megjelenes;

                }
                set
                {
                    megjelenes = value;
                }
            }
            public int Ar
            {
                get
                {
                    return ar;

                }
                set
                {
                    ar = value;
                }
            }
        }

}

CsDc还有一个额外的数组。

1 个答案:

答案 0 :(得分:0)

我认为您由于if...中的cbKiado_SelectedIndexChanged()而重复了

if (cbKiado.Text.Equals("DC"));
{
...
}

仅当文本为;时,才想运行{...}代码块,则需要删除DC。您现在遇到的情况是,在真实情况下运行空块并始终运行{...}。我想这将使文件读取两次。