Winforms中的C#文件IO存在问题

Winforms中的C#文件IO存在问题,c#,winforms,C#,Winforms,我对C#Winforms文件IO有问题。代码符合要求,但执行时返回错误 输出代码如下: private void saveData() { string fullPath = System.Environment.GetEnvironmentVariable(@"%MyDocuments%\HellsingRPG\"); StreamWriter writer = new StreamWriter(fullPath + textBox2.Text + "

我对C#Winforms文件IO有问题。代码符合要求,但执行时返回错误

输出代码如下:

private void saveData()
    {
        string fullPath = System.Environment.GetEnvironmentVariable(@"%MyDocuments%\HellsingRPG\");

        StreamWriter writer = new StreamWriter(fullPath + textBox2.Text + ".txt");
        writer.WriteLine(textBox1.Text + "," + textBox2.Text + "," + textBox3.Text + "," + textBox4.Text + "," + comboBox1.SelectedText + "," + 
            numericUpDown25.Value + "," + numericUpDown1.Value + "," + numericUpDown2.Value + "," + numericUpDown3.Value + "," + numericUpDown4.Value + "," +
            numericUpDown5.Value + "," + numericUpDown6.Value + "," + numericUpDown7.Value + "," + numericUpDown8.Value + "," + numericUpDown9.Value + "," +
            numericUpDown10.Value + "," + numericUpDown11.Value + "," + numericUpDown12.Value + "," + numericUpDown13.Value + "," + numericUpDown14.Value
            + "," + numericUpDown15.Value + "," + numericUpDown16.Value + "," + numericUpDown17.Value + "," + numericUpDown18.Value + "," + 
            numericUpDown19.Value + "," + numericUpDown20.Value + "," + numericUpDown21.Value + "," + numericUpDown22.Value);
        writer.Close();
    }
加载数据的代码如下:

private void loadData()
    {
        Stream myStream = null;
        OpenFileDialog openFileDialog1 = new OpenFileDialog();

        openFileDialog1.InitialDirectory = System.Environment.GetEnvironmentVariable(@"%MyDocuments%\HellsingRPG\");
        openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
        openFileDialog1.FilterIndex = 2;
        openFileDialog1.RestoreDirectory = true;

        if (openFileDialog1.ShowDialog() == DialogResult.OK)
        {
            try
            {
                if ((myStream = openFileDialog1.OpenFile()) != null)
                {
                    using (myStream)
                    {
                        List<string> myData = parseCSV(System.Convert.ToString(myStream));
                        textBox1.Text = myData[0];
                        textBox2.Text = myData[1];
                        textBox3.Text = myData[3];
                        textBox4.Text = myData[4];
                        comboBox1.SelectedText = myData[5];
                        numericUpDown25.Value = System.Convert.ToDecimal(myData[6]);
                        numericUpDown1.Value = System.Convert.ToDecimal(myData[7]);
                        numericUpDown2.Value = System.Convert.ToDecimal(myData[8]);
                        numericUpDown3.Value = System.Convert.ToDecimal(myData[9]);
                        numericUpDown4.Value = System.Convert.ToDecimal(myData[10]);
                        numericUpDown5.Value = System.Convert.ToDecimal(myData[11]);
                        numericUpDown6.Value = System.Convert.ToDecimal(myData[12]);
                        numericUpDown7.Value = System.Convert.ToDecimal(myData[13]);
                        numericUpDown8.Value = System.Convert.ToDecimal(myData[14]);
                        numericUpDown9.Value = System.Convert.ToDecimal(myData[15]);
                        numericUpDown10.Value = System.Convert.ToDecimal(myData[16]);
                        numericUpDown11.Value = System.Convert.ToDecimal(myData[17]);
                        numericUpDown12.Value = System.Convert.ToDecimal(myData[18]);
                        numericUpDown13.Value = System.Convert.ToDecimal(myData[19]);
                        numericUpDown14.Value = System.Convert.ToDecimal(myData[20]);
                        numericUpDown15.Value = System.Convert.ToDecimal(myData[21]);
                        numericUpDown16.Value = System.Convert.ToDecimal(myData[22]);
                        numericUpDown17.Value = System.Convert.ToDecimal(myData[23]);
                        numericUpDown18.Value = System.Convert.ToDecimal(myData[24]);
                        numericUpDown19.Value = System.Convert.ToDecimal(myData[25]);
                        numericUpDown20.Value = System.Convert.ToDecimal(myData[26]);
                        numericUpDown21.Value = System.Convert.ToDecimal(myData[27]);
                        numericUpDown22.Value = System.Convert.ToDecimal(myData[28]);
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
            }
        }
    }
private void loadData()
{
流myStream=null;
OpenFileDialog openFileDialog1=新建OpenFileDialog();
openFileDialog1.InitialDirectory=System.Environment.GetEnvironmentVariable(@“%MyDocuments%\HellsingRPG\”;
openFileDialog1.Filter=“txt文件(*.txt)|*.txt |所有文件(*.*)|*.*”;
openFileDialog1.FilterIndex=2;
openFileDialog1.RestoreDirectory=true;
如果(openFileDialog1.ShowDialog()==DialogResult.OK)
{
尝试
{
if((myStream=openFileDialog1.OpenFile())!=null)
{
使用(myStream)
{
List myData=parseCSV(System.Convert.ToString(myStream));
textBox1.Text=myData[0];
textBox2.Text=myData[1];
textBox3.Text=myData[3];
textBox4.Text=myData[4];
comboBox1.SelectedText=myData[5];
numericUpDown25.Value=System.Convert.ToDecimal(myData[6]);
numericUpDown1.Value=System.Convert.ToDecimal(myData[7]);
numericUpDown2.Value=System.Convert.ToDecimal(myData[8]);
numericUpDown3.Value=System.Convert.ToDecimal(myData[9]);
numericUpDown4.Value=System.Convert.ToDecimal(myData[10]);
numericUpDown5.Value=System.Convert.ToDecimal(myData[11]);
numericUpDown6.Value=System.Convert.ToDecimal(myData[12]);
numericUpDown7.Value=System.Convert.ToDecimal(myData[13]);
numericUpDown8.Value=System.Convert.ToDecimal(myData[14]);
numericUpDown9.Value=System.Convert.ToDecimal(myData[15]);
numericUpDown10.Value=System.Convert.ToDecimal(myData[16]);
numericUpDown11.Value=System.Convert.ToDecimal(myData[17]);
numericUpDown12.Value=System.Convert.ToDecimal(myData[18]);
numericUpDown13.Value=System.Convert.ToDecimal(myData[19]);
numericUpDown14.Value=System.Convert.ToDecimal(myData[20]);
numericUpDown15.Value=System.Convert.ToDecimal(myData[21]);
numericUpDown16.Value=System.Convert.ToDecimal(myData[22]);
numericUpDown17.Value=System.Convert.ToDecimal(myData[23]);
numericUpDown18.Value=System.Convert.ToDecimal(myData[24]);
numericUpDown19.Value=System.Convert.ToDecimal(myData[25]);
numericUpDown20.Value=System.Convert.ToDecimal(myData[26]);
numericUpDown21.Value=System.Convert.ToDecimal(myData[27]);
numericUpDown22.Value=System.Convert.ToDecimal(myData[28]);
}
}
}
捕获(例外情况除外)
{
MessageBox.Show(“错误:无法从磁盘读取文件。原始错误:”+ex.Message);
}
}
}
这一切都很好。但是,当我使用它时,会出现以下错误:

“找不到文件”C:\Users\collmark\Documents\Visual Studio 2015\Projects\WindowsFormsApplication1\WindowsFormsApplication1\bin\Release\System.IO.Filestream”

“错误:无法从磁盘读取文件。原始错误:索引超出范围 范围必须为非负数且小于集合的大小。 参数名称:索引。“


谢谢

您的保存数据似乎保存了22个字段,而读取数据则需要28个字段

我怀疑myData对象不包含您试图读取的字段索引,因此索引超出范围

在打印异常数据时,请帮自己一个忙不要局限于消息,而是打印整个堆栈跟踪,它会告诉您哪一行有故障,并提示您实际的问题


MessageBox.Show(“错误:无法从磁盘读取文件。原始错误:”+ex.ToString())

嗨,马克,欢迎来到p.SE。我们不是一家调试服务公司。还有人试图自学c#我只遇到过一些精英人士,他们只关心让自己好看,不关心帮助人们学习编程。你看起来很像stackoverflow。我希望你与众不同。我很抱歉你过去和其他人有过问题,但你显然没有努力满足我们网站的发布准则。这不是我的精英主义。马克,
System.Convert.ToString(myStream));
不起作用,你会得到一个类似
System.IO.Filestream
的字符串。使用StreamReader或File.ReadAllText来读取文本文件。肯定没有足够的comm。它似乎只保存22个字段,但我仔细检查了,字段数相同。另外,我在Visual Studio 2015中没有遇到此错误,我在Windows中得到它在我运行它之后。我在Visual Studio Express中没有收到任何错误。您仍然有索引问题,可能parseCSV没有返回正确数量的字段,它是否跳过空字段?它是否正确处理引用?stacktrace指向哪一行?您可以试着调试并逐行遍历代码查看我在哪里t crashest写出csv的顶部文本肯定显示了不同数量的字段..您将其拆分..您应该能够看到您拥有的字段数量是不同的。此外,我祈祷您的文本中没有逗号!