读入二进制文件时发生错误????
部分代码:
- C# code
public void bReadFile(string file, ListBox lb) { using (FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read)) { BinaryReader br = new BinaryReader(fs); char[] car = br.ReadChars((int)fs.Length); string[] scar = OutPutArray(car); lb.Items.AddRange(scar);//把文件读入到ListBox里面 br.Close(); } }public string[] OutPutArray(char[] car) { string[] ss = {};//这行错误吗? 有位同学将其赋值为null没事,而我会报“没有new”的错误 //string ss2 = ""; int k = 0; for (int i = 0; i <= car.Length; i++) { //MessageBox.Show(car.Length.ToString()); while (car[i] != ',' && i != car.Length) { ss[k] += car[i];//这行代码出现“索引超出了数组界限”,想不明白 i++; } //ss[k] = ss2; k++; //ss2 = ""; //i++; } return ss; }
问题都在代码里面注释了,如果您有时间,如果您愿意,麻烦帮忙看看,谢谢啦^_^
[解决办法]
for (int i = 0; i <= car.Length; i++)
改为
for (int i = 0; i < car.Length; i++)
记住下标从0开始
[解决办法]
看不明白OutPutArray的作用,其中错误也有多处。
如果是想根据逗号','分拆单词,
可以用string.split方法
[解决办法]
试试:
for (int i = 0; i < car.Length; i++)
{
//MessageBox.Show(car.Length.ToString());
while (car[i] != ',' && i != car.Length-1)
{
ss[k] += car[i];//这行代码出现“索引超出了数组界限”,想不明白
i++;
}
//ss[k] = ss2;
k++;
//ss2 = "";
//i++;
}
[解决办法]
改的地方太多了,不一个个说了,我把测试通过的给你看,你自己一一对比吧。
- C# code
public void bReadFile(string file, ListBox lb){ using (FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read)) { BinaryReader br = new BinaryReader(fs); char[] car = br.ReadChars((int)fs.Length); string[] scar = OutPutArray(car); lb.Items.AddRange(scar); br.Close(); }}public string[] OutPutArray(char[] car){ int len = 0; //存储要分配的字符数组的个数 for (int i = 0; i < car.Length; i++) { if (car[i] != ',') { len++; } } int k = 0; string[] ss=new string[len]; //必须要new了才能分配内存空间 for (int i = 0; i < car.Length; i++) { //这个里面不要套while了,外面那层for已经是循环了 if (car[i] != ',') //&& i != car.Length这个也已经通过 for里面的i < car.Length实现了。 { ss[k] += car[i]; k++; } } return ss;}
[解决办法]
[解决办法]
- C# code
public void bReadFile(string file, ListBox lb){ using (FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read)) { BinaryReader br = new BinaryReader(fs); string[] scar = br.ReadString().Split(new char[] { ',' }); lb.Items.AddRange(scar);//把文件读入到ListBox里面 br.Close(); }}
[解决办法]
如果他文件中还有整数之类的二进制数据,
br.ReadString()就读不全。
但看这样子文件内容都是从listBox中获取的,如果没有特殊处理,
应该都是unicode。
该没问题吧