Esempio n. 1
0
        /// <summary>
        ///  将文件的内容写出到目的流中
        /// </summary>
        /// <param name="destStream">目的流</param>
        /// <param name="filepath">文件路径</param>
        /// <param name="start">文件内容的起始读取位置</param>
        /// <param name="len">文件内容的读取字节长度</param>
        /// <param name="aWriteNotify">写内容进度通知委托处理机</param>
        /// <returns>成功写出的字节长度</returns>
        public static int WriteFileToStream(Stream destStream, string filepath, int start, int len, DLStreamWriteNotify aWriteNotify)
        {
            FileStream fs = null;

            try
            {
                fs = File.Open(filepath, FileMode.Open, FileAccess.Read, FileShare.Read);
                return(WriteStream(destStream, fs, start, len, aWriteNotify));
            }
            finally
            {
                try { if (fs != null)
                      {
                          fs.Close();
                      }
                }
                catch  { }
            }
        }
Esempio n. 2
0
 /// <summary>
 /// 将原始流的数据写出到目的流中
 /// </summary>
 /// <param name="destStream">目的流</param>
 /// <param name="srcStream">原始流</param>
 /// <param name="start">从原字节流读数据的开始位置</param>
 /// <param name="len">从原字节流读数据的长度</param>
 /// <param name="aWriteNotify"></param>
 /// <returns>返回成功写出的字节数量</returns>
 public static int WriteStream(Stream destStream, Stream srcStream, int start, int len, DLStreamWriteNotify aWriteNotify)
 {
     return(WriteStream(destStream, srcStream, 2048, start, len, aWriteNotify));
 }
Esempio n. 3
0
        /// <summary>
        /// 将原始流的数据写出到目的流中(含验证)
        /// </summary>
        /// <param name="destStream">目的流</param>
        /// <param name="srcStream">原始流</param>
        /// <param name="blockSize">块大小</param>
        /// <param name="start">从原字节流读数据的开始位置</param>
        /// <param name="len">从原字节流读数据的长度</param>
        /// <param name="aWriteNotify"></param>
        /// <param name="checkSum">验证码</param>
        /// <returns>返回成功写出的字节数量</returns>
        public static int WriteStream(Stream destStream, Stream srcStream, int blockSize, int start, int len, DLStreamWriteNotify aWriteNotify, int checkSum)
        {
            byte[] bufs = null;

            if (blockSize < 0)
            {
                bufs = new byte[len];
            }
            else
            {
                bufs = new byte[blockSize];
            }
            int totalWriteCount = 0;   //总共已经写的字节数量
            int leftCount       = len; //剩余字节数量

            //System.Console.WriteLine(DateTime.Now.ToString() + "想要读取: " + len + "字节, 分块:" + blockSize + "字节");
            try
            {
                if (start != 0)
                {
                    if (!(srcStream is NetworkStream))   //网络流不支持定位功能;


                    {
                        srcStream.Seek(start, SeekOrigin.Begin); //对流进行定位
                    }
                }
                int oneReadBytes = (leftCount > blockSize || len <= 0) ? blockSize : leftCount;  //本次应该读取的字节数量


                if (blockSize < 0)
                {
                    oneReadBytes = len;
                }
                int readCount = srcStream.Read(bufs, 0, oneReadBytes);
                if (getCheckSum(bufs) != checkSum)
                {
                    return(0);
                }
                while (readCount > 0)
                {
                    destStream.Write(bufs, 0, readCount);
                    destStream.Flush();
                    totalWriteCount += readCount;


                    if (aWriteNotify != null)
                    {
                        aWriteNotify(totalWriteCount);
                    }
                    if (totalWriteCount >= len && len > 0)
                    {
                        break;
                    }
                    leftCount = len - totalWriteCount;
                    // System.Console.WriteLine(DateTime.Now.ToString() + " 本次想读: " + readCount + ",实际读:" + readCount + ", 总共已读:" + totalWriteCount + ",剩余"
                    // //       + leftCount + " 字节"
                    //    );
                    oneReadBytes = (leftCount > blockSize || len <= 0) ? (blockSize < 0 ? len : blockSize) : leftCount;  //本次应该读取的字节数量


                    if (blockSize < 0)
                    {
                        oneReadBytes = leftCount;
                    }
                    else
                    {
                        oneReadBytes = (leftCount > blockSize || len <= 0) ? blockSize : leftCount;  //本次应该读取的字节数量
                    }
                    readCount = srcStream.Read(bufs, 0, oneReadBytes);
                    System.Console.WriteLine(totalWriteCount);
                }
                // System.Console.WriteLine(totalWriteCount);
            }
            catch (Exception ee)
            {
                System.Console.Write(ee.Message);
                System.Console.Write(ee.StackTrace);
            }
            // System.Console.WriteLine("总共读取字节" + totalWriteCount);
            // System.Console.WriteLine(DateTime.Now.ToString());
            return(totalWriteCount);
        }
Esempio n. 4
0
        /// <summary>
        ///  将字节流的内容写入到文件中
        /// </summary>
        /// <param name="desfilepath">目的文件路径</param>
        /// <param name="srcStream">源字节流</param>
        /// <param name="start">文件内容的起始写位置</param>
        /// <param name="len">文件内容的写字节长度</param>
        /// <param name="aWriteNotify">写内容进度通知委托处理机</param>
        /// <returns>成功写到文件中的字节长度</returns>
        public static int WriteStreamToFile(string desfilepath, Stream srcStream, int start, int len, DLStreamWriteNotify aWriteNotify)
        {
            FileStream fs = null;

            try
            {
                if (!File.Exists(desfilepath))
                {
                    fs = File.Create(desfilepath);
                }
                else
                {
                    fs = File.Open(desfilepath, FileMode.Open, FileAccess.Write, FileShare.Write);
                }
                fs.Seek(start, SeekOrigin.Begin);  //注意,此处进行偏移;下面参数穿入了 0

                return(WriteStream(fs, srcStream, 0, len, aWriteNotify));
            }
            finally
            {
                try { if (fs != null)
                      {
                          fs.Close();
                      }
                }
                catch  { }
            }
        }