首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C#文件分割器,帮忙改下,该怎么解决

2012-03-22 
C#文件分割器,帮忙改下//计算需要分配多少个文件void SaveFile(int much,int big) {//much是文件大小除分

C#文件分割器,帮忙改下
//计算需要分配多少个文件
  void SaveFile(int much,int big) {//much是文件大小除分割大小big决定要分几块
  for (int i = 0; i < much; i++)
  {
  FileStream fs = new FileStream(txt_choice.Text, FileMode.Open);
  byte[] b = new byte[((i+1)*big*1024)];
  fs.Read(b, i * big * 1024, (i+1) * big * 1024);//循环到第二次 这里就会说溢出,改怎么写啊
  fs.Close();

  try
  {
  FileStream f = new FileStream(txt_Save.Text + i, FileMode.CreateNew);
  f.Write(b, i * big * 1024, (i + 1) * big * 1024);
  f.Close();
  }
  catch (Exception)
  {
  MessageBox.Show("分割失败,此文件已经存在!");
  }
  }
  FileStream fs1 = new FileStream(txt_choice.Text, FileMode.Open);
  int count = (int)fs1.Length - big * 1024;
  byte[] b1 = new byte[count*big*1024];
  MessageBox.Show(b1.Length.ToString());
  fs1.Read(b1, much * big * 1024, (int)fs1.Length);
  fs1.Close();
  FileStream f1 = new FileStream(txt_Save.Text + much, FileMode.CreateNew);
  f1.Write(b1, much * big * 1024, (int)f1.Length);
  f1.Close();
  }

就是用户输入要分割的文件,和分割的大小big,系统根据文件大小除big算出much需要分割成几块,这样分割后保存到一个地方去,现在主要是byte数组的大小,以及read截取的问题,有溢出,哪位大哥帮忙改下

[解决办法]
fs.Read(b, i * big * 1024, (i+1) * big * 1024)
第二个参数,是说的在数组中的位置,不是文件的。Write也一样
要修改在文件中的位置,用fs.Seek
[解决办法]
另外楼主循环部分貌似有问题,每次读取的大小还不一样,是故意这么弄的吗?如果是每次一样的话,给楼主大改下

C# code
void SaveFile(int big){    string input = txt_choice.Text;    string output = txt_Save.Text;    int block = 10;    using (FileStream read = File.OpenRead(input))    {        byte[] b = new byte[big * block];        int count = read.Read(b, 0, big * block);        int s = 0;        while (count > 0)        {            FileStream write;            try            {                write = new FileStream(output + s++, FileMode.CreateNew);                write.Write(b, 0, count);            }            catch (Exception)            {                MessageBox.Show("分割失败,此文件已经存在!");                break;            }            count = read.Read(b, 0, big * block);        }    }} 

热点排行