C# 尝试添加列表时出现流结束异常<&燃气轮机;从二进制文件到listbox1的项目
我的项目将电话号码存储到列表中,并将其保存到.bin文件中:C# 尝试添加列表时出现流结束异常<&燃气轮机;从二进制文件到listbox1的项目,c#,winforms,list,listbox,binaryreader,C#,Winforms,List,Listbox,Binaryreader,我的项目将电话号码存储到列表中,并将其保存到.bin文件中: private void savebutton_Click(object sender, EventArgs e) { SaveFileDialog sv = new SaveFileDialog(); sv.Filter = "Binary files (*.bin)|*.bin|All files(*.*)|*.*"; sv.Title = "Save File";
private void savebutton_Click(object sender, EventArgs e)
{
SaveFileDialog sv = new SaveFileDialog();
sv.Filter = "Binary files (*.bin)|*.bin|All files(*.*)|*.*";
sv.Title = "Save File";
sv.FilterIndex = 2;
sv.RestoreDirectory = true;
sv.InitialDirectory = Path.GetFullPath(@"F:\Computer Technology Skills\Programming 35\Module 1\ICA10\ICA10\bin\Debug");
if (sv.ShowDialog() == DialogResult.OK)
{
try
{
FileStream fs = new FileStream(sv.FileName, FileMode.Create, FileAccess.Write);
BinaryWriter file = new BinaryWriter(fs);
// System.IO.StreamWriter file = new System.IO.StreamWriter(sv.FileName.ToString());
var message = string.Join(Environment.NewLine, PhoneNum);
file.Write(message);
file.Close();
fs.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
然后,按load按钮将删除listbox1中当前的项目,并将其替换为每行bin文件中的任何项目
private void loadbutton_Click(object sender, EventArgs e)
{
OpenFileDialog od = new OpenFileDialog();
string databyte = null;
long iNumInts = 0;
od.RestoreDirectory = true;
od.InitialDirectory = Path.GetFullPath(@"F:\Computer Technology Skills\Programming 35\Module 1\ICA10\ICA10\bin\Debug");
if (od.ShowDialog() == DialogResult.OK)
{
try
{
FileStream fs = new FileStream(od.FileName, FileMode.Open);
listBox1.Items.Clear();
using (BinaryReader reader = new BinaryReader(fs))
{
iNumInts = fs.Length / sizeof(int);
for (int i = 0; i < iNumInts; i++)
{
databyte = reader.ReadString(); //Endofstreamexception
listBox1.Items.Add(databyte);
}
fs.Close();
reader.Close();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
private void loadbutton\u单击(对象发送者,事件参数e)
{
OpenFileDialog od=新建OpenFileDialog();
字符串databyte=null;
长iNumInts=0;
od.RestoreDirectory=true;
od.InitialDirectory=Path.GetFullPath(@“F:\Computer Technology Skills\Programming 35\Module 1\ICA10\ICA10\bin\Debug”);
if(od.ShowDialog()==DialogResult.OK)
{
尝试
{
FileStream fs=newfilestream(od.FileName,FileMode.Open);
listBox1.Items.Clear();
使用(BinaryReader=新的BinaryReader(fs))
{
iNumInts=fs.Length/sizeof(int);
对于(int i=0;i
问题是,当我加载我保存的文件时,所有项目都卡在listbox1的第一个索引上,我收到一个endofstream异常
我在这里有点困惑,因为我的笔记没有什么帮助,我发现的其他堆栈溢出问题都是使用整数或数组的示例。我从streamwriter切换到binarywriter,这帮了我很大的忙,但任何帮助都将不胜感激 查看您的存储代码,您似乎正在将电话号码写成一个字符串,并在它们之间加上一个换行分隔符。在read代码中,您试图使用ReadString方法将它们作为单个字符串读取
一个字符串输出等于一个字符串输入。换句话说,如果你把它们都写成一个字符串,那么就把它们都读成一个字符串。然后您可以使用string.split并获取各个数字 我建议使用
StreamReader
进行此操作
using (StreamReader reader = new StreamReader(od.Filename))
{
while (!reader.EndOfStream)
{
string line = reader.ReadLine();
listbox1.Items.Add(line);
}
}
您还可以使用which来完成所有功能(如果您使用的是.NET 4或更高版本)。谢谢;我猜二进制读取器用于int和bytes,streamreader用于string。