Dictionary<int, byte[]> dic = new Dictionary<int, byte[]>();
FileStream fs = new FileStream("d:\\xx.rar",FileMode.Open);
byte [] buff=new byte[1024*10];
int i = 0;
while (fs.Read(buff, 0, buff.Length) > 0)
{
dic.Add(i,buff);
}
fs.Flush();
fs.Close(); FileStream fss = new FileStream("d:\\aa.rar", FileMode.Create);
//现在我想实现 把dic中的数组写到它相应的位置
//也就说不按dic中的key的顺序写
fss.Write(dic[4],0,dic[4].Length);
fss.Write(dic[2], 0, dic[2].Length);
fss.Write(dic[1], 0, dic[1].Length);
fss.Write(dic[3], 0, dic[3].Length);
fss.Write(dic[0], 0, dic[0].Length);
// 这样写显然文件是打不开的
// 高手们指点指点啊
FileStream fs = new FileStream("d:\\xx.rar",FileMode.Open);
byte [] buff=new byte[1024*10];
int i = 0;
while (fs.Read(buff, 0, buff.Length) > 0)
{
dic.Add(i,buff);
}
fs.Flush();
fs.Close(); FileStream fss = new FileStream("d:\\aa.rar", FileMode.Create);
//现在我想实现 把dic中的数组写到它相应的位置
//也就说不按dic中的key的顺序写
fss.Write(dic[4],0,dic[4].Length);
fss.Write(dic[2], 0, dic[2].Length);
fss.Write(dic[1], 0, dic[1].Length);
fss.Write(dic[3], 0, dic[3].Length);
fss.Write(dic[0], 0, dic[0].Length);
// 这样写显然文件是打不开的
// 高手们指点指点啊
比如先来key=3的包的话,那么你这样:
fss.BeginWrite(dic[3],1024*10*(3-1),dic[3].Length,null,null);也就是异步来写同一个文件。
fss.Seek(3 * buff.Length, SeekOrigin.Begin);
fss.Write(dic[3], 0, dic[3].Length);
//齐活,就这么2句话
不过写完后大小增加了不少
rar的文件写完后不能解压
FileStream fs = new FileStream("d:\\GreatNews.zip", FileMode.Open);
byte [] buff=new byte[1024*20];
int i = 0;
while (fs.Read(buff, 0, buff.Length) > 0)
{
dic.Add(i,buff);
i = i + 1;
}
fs.Flush();
fs.Close();
FileStream fss = new FileStream("d:\\aa.zip", FileMode.Create); foreach (int key in dic.Keys)
{
fss.Seek(key * buff.Length, SeekOrigin.Begin);
fss.Write(dic[key], 0, dic[key].Length);
}
fss.Flush();
fss.Close();
图片看不到,RAR文件也损坏了,不知道什么原因
改成
fss.Seek((key+1)* buff.Length, SeekOrigin.Begin);
你的KEY有等于0的时候,TXT没有关系,打开的时候没有顺序问题,尽管你写入不对也没关系,还是能打开
但是图片和RAR就不行了,
KEY==0的时候就漏写了一个BUFF,肯定打不开
改成key +1 还是有问题啦
{
fss.Seek(key * buff.Length, SeekOrigin.Begin);
fss.Write(dic[key], 0, dic[key].Length);
}
fss.Flush();
fss.Close();
在读文件的时候改成这样了
Dictionary<int, byte[]> dic = new Dictionary<int, byte[]>();
FileStream fs = new FileStream("d:\\"+textBox1.Text.Trim()+"", FileMode.Open);
byte [] buff=new byte[1024];
int i = 0;
int buffLenth=0;
do
{
buff = new byte[1024];
buffLenth = fs.Read(buff, 0, buff.Length);
dic.Add(i,buff);
i++;
} while (buffLenth > 0);
fs.Flush();
fs.Close();
FileStream fss = new FileStream("d:\\aa"+textBox1.Text.Trim(), FileMode.Create); foreach (int key in dic.Keys)
{
fss.Seek(key*dic[key].Length,SeekOrigin.Begin);
fss.Write(dic[key],0,dic[key].Length);
}
fss.Flush();
fss.Close();
不过没弄明白为什么 用while不行,用do while就可以