无法加载文件WPF C#

时间:2016-07-29 10:30:16

标签: c# wpf save loading

您好我正在制作一个简单的输入数据和输出数据程序。目前我正在努力保存和装载。它一直说加载失败了。 我有两个课程,一个用于数据,另一个用于报告管理器'它将数据添加到字典中。不确定我是否已经走了这个漫长的方式。

在关于电路板存储的数据的类中,我有以下构造函数:

  public board(string inNumber, int inBaudRate1, int inBaudRate2, int inBaudRate3, int inBaudRate4, int inParidy1,int inParidy2, int inParidy3, int inParidy4, int inStopBits1, int inStopBits2, int inStopBits3, 
        int inStopBits4, int inDataBits1, int inDataBits2, int inDataBits3, int inDataBits4, string inPortName1, string inPortName2, string inPortName3, string inPortName4, string inDate)
    {
        inNumber = batchNumber;

        BaudRate1 = inBaudRate1;
        BaudRate2 = inBaudRate2;
        BaudRate3 = inBaudRate3;
        BaudRate4 = inBaudRate4;

        Paridy1 = inParidy1;
        Paridy2 = inParidy2;
        Paridy3 = inParidy3;
        Paridy4 = inParidy4;

        stopBits1 = inStopBits1;
        stopBits2 = inStopBits2;
        stopBits3 = inStopBits3;
        stopBits4 = inStopBits4;

        dataBits1 = inDataBits1;
        dataBits2 = inDataBits2;
        dataBits3 = inDataBits3;
        dataBits4 = inDataBits4;

        portName1 = inPortName1;
        portName2 = inPortName2;
        portName3 = inPortName3;
        portName4 = inPortName4;

        date = inDate;
    }

然后我在相同的类中有以下保存和加载方法:

   public virtual void Save(System.IO.TextWriter textOut)
    {
            textOut.WriteLine(batchNumber);
            textOut.WriteLine(BaudRate1);
            textOut.WriteLine(BaudRate2);
            textOut.WriteLine(BaudRate3);
            textOut.WriteLine(BaudRate4);
            textOut.WriteLine(Paridy1);
            textOut.WriteLine(Paridy2);
            textOut.WriteLine(Paridy3);
            textOut.WriteLine(Paridy4);
            textOut.WriteLine(stopBits1);
            textOut.WriteLine(stopBits2);
            textOut.WriteLine(stopBits3);
            textOut.WriteLine(stopBits4);
            textOut.WriteLine(dataBits1);
            textOut.WriteLine(dataBits2);
            textOut.WriteLine(dataBits3);
            textOut.WriteLine(dataBits4);
            textOut.WriteLine(portName1);
            textOut.WriteLine(portName2);
            textOut.WriteLine(portName3);
            textOut.WriteLine(portName4);
            textOut.WriteLine(date);
            //method to save the skier
    }



    public bool Save(string filename)
    {
        System.IO.TextWriter textOut = null; //set to null
        try
        {
            textOut = new System.IO.StreamWriter(filename);
            Save(textOut); //call save method
        }
        catch
        {
            return false; //if failed return false
        }
        finally
        {
            if (textOut != null) //if saved
            {
                textOut.Close(); //close file
            }

        }
        return true;
    } //save to file

    public static board Load(System.IO.TextReader textIn)
    {
        {
            string batchNumber = textIn.ReadLine();
            int baudRate1 = int.Parse(textIn.ReadLine());
            int baudRate2 = int.Parse(textIn.ReadLine());
            int baudRate3 = int.Parse(textIn.ReadLine());
            int baudRate4 = int.Parse(textIn.ReadLine());
            int paridy1 = int.Parse(textIn.ReadLine());
            int paridy2 = int.Parse(textIn.ReadLine());
            int paridy3 = int.Parse(textIn.ReadLine());
            int paridy4 = int.Parse(textIn.ReadLine());
            int stopBits1 = int.Parse(textIn.ReadLine());
            int stopBits2 = int.Parse(textIn.ReadLine());
            int stopBits3 = int.Parse(textIn.ReadLine());
            int stopBits4 = int.Parse(textIn.ReadLine());
            int dataBits1 = int.Parse(textIn.ReadLine());
            int dataBits2 = int.Parse(textIn.ReadLine());
            int dataBits3 = int.Parse(textIn.ReadLine());
            int dataBits4 = int.Parse(textIn.ReadLine());
            string portName1 = textIn.ReadLine();
            string portName2 = textIn.ReadLine();
            string portName3 = textIn.ReadLine();
            string portName4 = textIn.ReadLine();
            string date = textIn.ReadLine();
            board result = new board(batchNumber, baudRate1, baudRate2, baudRate3, baudRate4, paridy1, paridy2, paridy3, paridy4, stopBits1, stopBits2, stopBits3, stopBits4, dataBits1, dataBits2, dataBits3,
                dataBits4, portName1, portName2, portName3, portName4, date);
            return result;
        } //load board
    }


    public static board Load(string filename)
    {
        board result;
        System.IO.TextReader textIn = null;
        try
        {
            textIn = new System.IO.StreamReader(filename);
            result = Load(textIn);
        }
        catch (Exception e)
        {
            throw e;
        }
        finally
        {
            if (textIn != null) textIn.Close();
        }
        return result;
    } //load from file

在Report Manager类中,我有以下保存和加载方法:

       public void SaveReport(System.IO.TextWriter textOut)
    {
        textOut.WriteLine(reportName);
        textOut.WriteLine(batchNumber);
        textOut.WriteLine(Boards.Count);
        foreach (board a in Boards.Values)
        {
            a.Save(textOut);
        }
    } //save the report

    public void SaveReport(string filename)
    {
        System.IO.TextWriter textOut = new System.IO.StreamWriter(filename);

        try
        {
            SaveReport(textOut);
        }
        catch (Exception e)
        {
            throw e;
        }
        finally
        {
           textOut.Close();
        }

    }

    public static reportManager Load(System.IO.TextReader textIn)
    {
        string reportName = textIn.ReadLine();
        reportManager result = new reportManager(reportName);
        batchNumber = int.Parse(textIn.ReadLine());
        int numberOfBoards = int.Parse(textIn.ReadLine());
        for (int i = 0; i < numberOfBoards; i++)
        {
            board a = board.Load(textIn);
            string n = a.getBatchNumber();
            Boards.Add(n, a);
        }
        return result;
    }

    public static reportManager Load(string filename)
    {
        reportManager result;
        System.IO.TextReader textIn = null;
        try
        {
            textIn = new System.IO.StreamReader(filename);
            result = Load(textIn);
        }
        catch (Exception e)
        {
            throw e;
        }
        finally
        {
            if (textIn != null) textIn.Close();
        }
        return result;
    }

最后在主窗口xaml.cs文件中,我在开头有以下内容:

 public MainWindow()
    {
        InitializeComponent();

        StreamReader reader = null;
        try
        {
            reader = new StreamReader("Report.txt");
            reportManager.Load("Report.txt");
        }
        catch
        {
            MessageBox.Show("Loading Failed");
        }
        finally
        {
            reader.Close();
        }
        newReport.SaveReport("Report.txt");
    }

,单击保存按钮时,我有以下代码:

      private void saveButton_Click(object sender, RoutedEventArgs e)
    {
        int inBaudRate1 = int.Parse(baudRateInput1.Text);
        int inBaudRate2 = int.Parse(baudRateInput2.Text);
        int inBaudRate3 = int.Parse(baudRateInput3.Text);
        int inBaudRate4 = int.Parse(baudRateInput4.Text);

        int inParity1 = int.Parse(parityInput1.Text);
        int inParity2 = int.Parse(parityInput2.Text);
        int inParity3 = int.Parse(parityInput3.Text);
        int inParity4 = int.Parse(parityInput4.Text);

        int inStopBits1 = int.Parse(stopBitsInput1.Text);
        int inStopBits2= int.Parse(stopBitsInput2.Text);
        int inStopBits3 = int.Parse(stopBitsInput3.Text);
        int inStopBits4 = int.Parse(stopBitsInput4.Text);

        int inDataBits1 = int.Parse(dataBitsInput1.Text);
        int inDataBits2 = int.Parse(dataBitsInput2.Text);
        int inDataBits3 = int.Parse(dataBitsInput3.Text);
        int inDataBits4 = int.Parse(dataBitsInput4.Text);

        string inPortName1 = portNameInput1.Text;
        string inPortName2 = portNameInput2.Text;
        string inPortName3 = portNameInput3.Text;
        string inPortName4 = portNameInput4.Text;

        string inDate = DateTime.Now.ToString("yyyyMMdd-HHMMss");

        try
        {
            board NewBoard = new board(null, inBaudRate1, inBaudRate2, inBaudRate3, inBaudRate4, inParity1, inParity2, inParity3, inParity4, inStopBits1, inStopBits2, inStopBits3, inStopBits4,
               inDataBits1, inDataBits2, inDataBits3, inDataBits4, inPortName1, inPortName2, inPortName3, inPortName4, inDate);
            NewBoard = newReport.AddBoard(inBaudRate1, inBaudRate2, inBaudRate3, inBaudRate4, inParity1, inParity2, inParity3, inParity4, inStopBits1, inStopBits2, inStopBits3, inStopBits4,
               inDataBits1, inDataBits2, inDataBits3, inDataBits4, inPortName1, inPortName2, inPortName3, inPortName4, inDate);
            //noOfDataEntriesTextBox.Text = NewBoard.getBatchNumber().ToString();
            MessageBox.Show("Data Added");
        }
        finally
        {
            clearAllInput();
            newReport.SaveReport("Report.txt");
        }
    }

很抱歉,如果不清楚,我可以根据需要提供更多代码。 谢谢,露西

0 个答案:

没有答案