日期:2014-05-18  浏览次数:20784 次

读入二进制文件时发生错误????
部分代码:
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();
     }
}