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);
}
}
}