读书人

读入二进制文件时发生异常?

发布时间: 2012-05-12 15:39:31 作者: rapoo

读入二进制文件时发生错误????
部分代码:

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;}
[解决办法]
探讨

引用:

看不明白OutPutArray的作用,其中错误也有多处。
如果是想根据逗号','分拆单词,
可以用string.split方法


思路是这样子的:把每个ListBox的项变成二进制写进二进制文件,考虑到要读出来方便,所以用“,”作为分隔标记;读出来的时候,读到“,”,就表示读到一个项(item),然后可以add进ListBox里面。

[解决办法]
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。
该没问题吧

读书人网 >C#

热点推荐