我用以下方法,复制一个文件 ,但是我打开ss.doc提示错误!但是我好象复制txt文件好象又可以用,不知道什么问题,谢谢!
              FileStream fs = new FileStream("f:\\test.doc", FileMode.Open, FileAccess.Read);
            FileStream fs1 = new FileStream("f:\\ss.doc", FileMode.Append, FileAccess.Write);
            fs.Position = 0;
            fs1.Position = 0;
            while (fs.Position < fs.Length)
            {
                byte[] dt = new byte[1024];
                int i = fs.Read(dt, 0, 1024);
                fs.Flush();
                fs1.Write(dt, 0, i);
                fs1.Flush();
                fs.Position = fs.Position + i;
                fs1.Position = fs1.Position + i;
            }
            fs.Flush();
            fs1.Flush();
            fs.Close();
            fs1.Close();

解决方案 »

  1.   

    复制文件请用
    System.IO.File.Copy
      

  2.   

    上面说的都乱七八糟,我的问题是:我用filestream 复制test.doc到一个新的文件ss.doc,然后按照上面的方法,
    结果打开ss.doc说是错误,无法打开. 
      

  3.   

    .doc又不是纯文本,你硬把它弄成Byte[]肯定错啊。
    复制文件请用 
    System.IO.File.Copy
      

  4.   

    上面我只是在自己电脑上做个实验,我的用途是在网络中socket 传输文件
    传输文件的话总不能用file.copy 吧,只能是byte[]形式传输啊
      

  5.   


      FileStream fs = new FileStream("f:\\test.doc", FileMode.Open, FileAccess.Read); 
                FileStream fs1 = new FileStream("f:\\ss.doc", FileMode.Append, FileAccess.Write); 
                fs.Position = 0; 
                fs1.Position = 0; 
                while (fs.Position < fs.Length) 
                { 
                    byte[] dt = new byte[1024]; 
                    int i = fs.Read(dt, 0, 1024); 
                    fs.Flush(); 
                    fs1.Write(dt, 0, i); 
                    fs1.Flush(); 
                    
                    fs1.Position = fs1.Position;
                } 
                fs.Flush(); 
                fs1.Flush(); 
                fs.Close(); 
                fs1.Close();
      

  6.   


    fs.position是流文件读取后的当前位置,你不用再进行设置它+I,否则会没有完全复制一些流文件.
      

  7.   

            /// <summary>
            /// 复制文件
            /// </summary>
            /// <param name="fromFile">要复制的文件</param>
            /// <param name="toFile">要保存的位置</param>
            /// <param name="lengthEachTime">每次复制的长度</param>
            private void CopyFile(string fromFile, string toFile, int lengthEachTime)
            {
                FileStream fileToCopy = new FileStream(fromFile, FileMode.Open, FileAccess.Read);
                FileStream copyToFile = new FileStream(toFile, FileMode.Append, FileAccess.Write);
                int lengthToCopy;
                if (lengthEachTime < fileToCopy.Length)//如果分段拷贝,即每次拷贝内容小于文件总长度
                {
                    byte[] buffer = new byte[lengthEachTime];
                    int copied = 0;
                    while (copied <= ((int)fileToCopy.Length - lengthEachTime))//拷贝主体部分
                    {
                        lengthToCopy = fileToCopy.Read(buffer, 0, lengthEachTime);
                        fileToCopy.Flush();
                        copyToFile.Write(buffer, 0, lengthEachTime);
                        copyToFile.Flush();
                        copyToFile.Position = fileToCopy.Position;
                        copied += lengthToCopy;
                    }
                    int left = (int)fileToCopy.Length - copied;//拷贝剩余部分
                    lengthToCopy = fileToCopy.Read(buffer, 0, left);
                    fileToCopy.Flush();
                    copyToFile.Write(buffer, 0, left);
                    copyToFile.Flush();
                }
                else//如果整体拷贝,即每次拷贝内容大于文件总长度
                {
                    byte[] buffer = new byte[fileToCopy.Length];
                    fileToCopy.Read(buffer,0,(int)fileToCopy.Length);
                    fileToCopy.Flush();
                    copyToFile.Write(buffer, 0, (int)fileToCopy.Length);
                    copyToFile.Flush();
                }
                fileToCopy.Close();
                copyToFile.Close();
            }