if (dr.Read())
            {
                File = (byte[])dr[1];
                STR_WJM = dr[0].ToString();
            }            SaveFileDialog saveFileDialog1 = new SaveFileDialog();
            Stream myStream;            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
           {
                if ((myStream = saveFileDialog1.OpenFile()) != null)
                {
                    using (BinaryWriter bw = new BinaryWriter(myStream))
                    {
                        // Add some text to the file.
                        bw.Write(File);
                   }                }
            }这样保存的文件可以正常打开            if (dr.Read())
            {
                File = (byte[])dr[1];
                STR_WJM = dr[0].ToString();
            }
            Stream s = new FileStream(STR_WJM, FileMode.Create);
            s.Write(File, 0, (int)s.Length);
            s.Dispose(); 
这样保存的文件不能正常打开我不想用saveFileDialog来保存,因为要弹出窗口,让用户选择的,我只想自动保存更新,类似后台更新程序一样
第二个代码有什么问题么?

解决方案 »

  1.   

    s.close();关闭流发帖子也有微博效果!一起用《Csdn收音机》吧!
      

  2.   

    using(Stream s = new FileStream(STR_WJM, FileMode.Create))
    {
      s.Write(File, 0, (int)s.Length);
      s.Close();  
    }
      

  3.   


    还是不行啊,现在下载后,运行时报不是有效的32位WIN程序
    同样的文件,用第一种就不会出现这样的问题,我下载的程序是EXE或DLL的
      

  4.   

    不会是FileMode.Create的问题吧
    一个是打开 一个新建?
      

  5.   

    你是想全写入吗?全写入可以用这个File.WriteAllBytes(路径,byte[]数组)
      

  6.   

    全写入是什么意思,我的程序是这样的,我往数据库中上传了一个EXE或DLL文件,用二进制保存的,现在我想把它在读出来,我用了我上面说的2种方案,第一种是可以实现的,但需要用户指定路径和文件名,我想用第二种的方法,无需让用户操作,自动下载到程序根目录下,类似于后台更新软件一样
      

  7.   

    我的意思是你要写入一个全新的文件,还是追加到一个已经存在的文件写入全新的文件,或者覆盖就可以用File.WriteAllBytes(string路径,byte[]数组)如果是追加就用
    byte[] bs = 要写入的byte[]数组;using (Stream stream = File.Open("路径", FileMode.Open))
    {
        stream.Write(bs, 0, (int)bs.Length);
        stream.Flush();
        stream.Close();
    }