正在将二进制文件读取到文本框中

本文关键字:文本 读取 二进制文件 | 更新日期: 2023-09-27 18:00:43

我正在尝试读取二进制文件中的两个值,并将第一个值放入文本框3,将第二个值放入文字框4。需要从文件中读取的2个值是用文本框1和2创建的,并用第一个按钮保存到文件中。点击按钮2,它应该读取文件并将值放在正确的位置。我不确定它是读错了还是写错了。当我单击按钮阅读并显示框时,显示如下:系统集合。通用的列表`1[test.Form1+ore]

代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
namespace test
{
public partial class Form1 : Form
{
    [Serializable]
    public class ore
    {
        public float Titan;
        public float Eperton;
    }
    ore b1 = null;
    ore b2 = null;

    public Form1()
    {
        InitializeComponent();
        b2 = new ore();
        b1 = new ore();
    }
    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        // 1st text box input is float
        float tempFloat;

        if (float.TryParse(textBox1.Text, out tempFloat))
        {
            b1.Titan = tempFloat;
        }
        else
            MessageBox.Show("uh oh");

    }

    private void textBox2_TextChanged(object sender, EventArgs e)
    {
        // 2nd text box input is float
        float tempFloat;
        if (float.TryParse(textBox1.Text, out tempFloat))
        {
            b2.Eperton = tempFloat;
        }
        else
            MessageBox.Show("uh oh");

    }

    private void button1_Click(object sender, EventArgs e)
    {
        // supposed to save list to file 
        List<ore> oreData = new List<ore>();
        oreData.Add(b1);
        oreData.Add(b2);
        FileStream fs = new FileStream("ore.dat", FileMode.Create);
        BinaryFormatter bf = new BinaryFormatter();
        bf.Serialize(fs, oreData);
        fs.Close();
    }
    private void textBox3_TextChanged(object sender, EventArgs e)
    {
        // 3rd text box 
    }
    private void textBox4_TextChanged(object sender, EventArgs e)
    {
        //4th text box
    }
    List<ore> books = new List<ore>(); // create list
    private void button2_Click(object sender, EventArgs e)
    {
        FileStream fs = new FileStream("ore.dat", FileMode.Open);
        BinaryFormatter bf = new BinaryFormatter();
        List<ore> books = (List<ore>)bf.Deserialize(fs);
        fs.Close();
        if (books.Count > 1)
        {
            textBox3.Text = books.ToString();//update the 3rd text box
            textBox4.Text = books.ToString();//update the 4th text box
        }
    }
}
}

正在将二进制文件读取到文本框中

我想知道你是否真的问过你想要什么,因为你在评论中有效地回答了自己的问题。。。

List<ore> books = new List<ore>(); // create list
private void button2_Click(object sender, EventArgs e)
{
    FileStream fs = new FileStream("ore.dat", FileMode.Open);
    BinaryFormatter bf = new BinaryFormatter();
    List<ore> books = (List<ore>)bf.Deserialize(fs);
    fs.Close();
    if (books != null)
    {
        if (books.Count > 0)
            textBox3.Text = books[0].SomeProperty.ToString();//update the 3rd text box
        if (books.Count > 1)
            textBox4.Text = books[1].SomeProperty.ToString();//update the 4th text box
    }
}

请注意SomeProperty的使用-这是因为books中的每个项都是对象ore的一个实例,因此您需要用ore中的适当属性(Titan或Eperton)来代替我的SomeProperty占位符。。如果您只是在ore上执行ToString(),那么您将以字符串的形式返回类型的名称,而不是其中的任何单个值——除非您重写了ToString()