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);
            // 这样写显然文件是打不开的
            // 高手们指点指点啊
      

解决方案 »

  1.   

    所以想看看大家有没有 把buff写到固定位置的方法
      

  2.   

    顶  没写过rar的文件格式
      

  3.   

    可以用FS.SEEK这个方法,不过你每次要配一下流的起始位置,但是按你的意思应该是很麻烦,但是能实现,真搞不懂为什么你要这样搞一个文件,它又没招你
      

  4.   

    使用fss.BeginWrite();
    比如先来key=3的包的话,那么你这样:
    fss.BeginWrite(dic[3],1024*10*(3-1),dic[3].Length,null,null);也就是异步来写同一个文件。
      

  5.   

     //比如说你想把DIC[3]写到文件的相应的位置
                fss.Seek(3 * buff.Length, SeekOrigin.Begin);
                fss.Write(dic[3], 0, dic[3].Length);
                //齐活,就这么2句话
      

  6.   

    这样写文件是可的 不过只能写一些文件 TXT的文件可以,
    不过写完后大小增加了不少
    rar的文件写完后不能解压
      

  7.   

     Dictionary<int, byte[]> dic = new Dictionary<int, byte[]>();
                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();
      

  8.   

    我这样写 但是结果只有TXT的文件可以打开,
    图片看不到,RAR文件也损坏了,不知道什么原因
      

  9.   

    fss.Seek(key * buff.Length, SeekOrigin.Begin); 
    改成
    fss.Seek((key+1)* buff.Length, SeekOrigin.Begin); 
    你的KEY有等于0的时候,TXT没有关系,打开的时候没有顺序问题,尽管你写入不对也没关系,还是能打开
    但是图片和RAR就不行了,
    KEY==0的时候就漏写了一个BUFF,肯定打不开
      

  10.   


    改成key +1 还是有问题啦
      

  11.   

               FileStream fss = new FileStream("d:\\aa.zip", FileMode.Create); fss.SetLength(dic.Count * buff.Length);            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();
      

  12.   

    终于找到问题了
    在读文件的时候改成这样了
     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就可以