当前位置:编程学习 > C#/ASP.NET >>

c# FileStream 的position属性是咋回事?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace _10通过文件流实现大文件拷贝
{
    class Program
    {
        static long position=0;
        static void Main(string[] args)
        {
            string source = @"E:\qvod\处女喪失.rmvb";

            string target = @"C:\DownLoad\dsfd";

            FileCopy(source, target);
            Console.WriteLine("ok");
            Console.ReadKey();
        }

        //大文件拷贝
        private static void FileCopy(string source, string target)
        {

            //FileStream ff=new FileStream("",FileMode.Open,FileAccess.ReadWrite

            //读取源文件
            using (FileStream fsRead = new FileStream(source, FileMode.Open))
            {
                //创建一个写入文件的文件流
                
                    byte[] byts = new byte[1024 * 1024*10]; //2MB

                    while (true)
                    {
                        //1.从源文件中读取一定的字节数保存到byts中。
                        //参数1:表示把源文件中的数据读取,并保存到byts数组中
                        //参数2:表示从数组中的第几个索引开始存放数据。
                        //参数3:本次最多能读取的字节数,一般为数组的长度。
                        //返回值count,表示本次实际读取的字节数。

                        int count = fsRead.Read(byts, 0, byts.Length);
                        using(FileStream fsWrite=new FileStream(target,FileMode.Create))
                        {
                            fsWrite.Position = position;
                        if (count == 0)
                        {
                            break;
                        }

                        //将刚刚读取出来的数据,byts中的数据,写入到新文件中。
                        //参数1:把byts中的数据写入到文件
                        //参数2:从byts数组中的第0个索引开始写入
                        //参数3:本次写入操作要写入的字节的个数。
                        fsWrite.Write(byts, 0, count);
                        //Console.Write(". ");
                        position = fsWrite.Position;
                        Console.WriteLine("已完成:{0}%", ((double)fsWrite.Position / fsRead.Length) * 100);
                    }
                    }

                }
            }
        }
    }

position属性不是根据写入的内容增加吗?为啥挂了? --------------------编程问答-------------------- 我以为position属性可以记录当前文件写入的位置,然后在新的filestream中定义写入位置就可以继续写了。 --------------------编程问答-------------------- 就是定位,比如设置值1000,然后执行读或写都是从这个位置开始的。 --------------------编程问答-------------------- 一个指针,指向你读/写文件的位置。 --------------------编程问答-------------------- fsWrite.Position;获取或设置当前流的位置
fsWrite.Seek;偏移当前流的位置


class Program
    {
        static long position=0;
        static void Main(string[] args)
        {
            string source = @"E:\qvod\处女喪失.rmvb";

            string target = @"C:\DownLoad\dsfd";
            //这里的目标路径应该是一个文件路径,如果是目录的话你得在后面的代码加上文件名

            FileCopy(source, target);
            Console.WriteLine("ok");
            Console.ReadKey();
        }

        //大文件拷贝
        private static void FileCopy(string source, string target)
        {

            //FileStream ff=new FileStream("",FileMode.Open,FileAccess.ReadWrite

            //读取源文件
            using (FileStream fsRead = new FileStream(source, FileMode.Open))
            {
                //创建一个写入文件的文件流
                
                    byte[] byts = new byte[1024 * 1024*10]; //2MB

                    while (true)
                    {
                        //1.从源文件中读取一定的字节数保存到byts中。
                        //参数1:表示把源文件中的数据读取,并保存到byts数组中
                        //参数2:表示从数组中的第几个索引开始存放数据。
                        //参数3:本次最多能读取的字节数,一般为数组的长度。
                        //返回值count,表示本次实际读取的字节数。

                        int count = fsRead.Read(byts, 0, byts.Length);

                        //不能每次循环都穿件文件,用FileMode.Append
                        using(FileStream fsWrite=new FileStream(target,FileMode.Create))
                        {
                            //流的位置自动就在末尾,不用指定,这句代码不需要
                            fsWrite.Position = position;
                        if (count == 0)
                        {
                            break;
                        }

                        //将刚刚读取出来的数据,byts中的数据,写入到新文件中。
                        //参数1:把byts中的数据写入到文件
                        //参数2:从byts数组中的第0个索引开始写入
                        //参数3:本次写入操作要写入的字节的个数。
                        fsWrite.Write(byts, 0, count);
                        //Console.Write(". ");
                        position = fsWrite.Position;
                        Console.WriteLine("已完成:{0}%", ((double)fsWrite.Position / fsRead.Length) * 100);
                    }
                    }

                }
            }
        } --------------------编程问答-------------------- 太感谢了。。。。。。。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,