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

ZuiChunWeiQiao 2012-12-23 11:26:30
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属性不是根据写入的内容增加吗?为啥挂了?
...全文
1094 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ZuiChunWeiQiao 2013-01-11
  • 打赏
  • 举报
回复
太感谢了。。。。。。。
threenewbee 2012-12-24
  • 打赏
  • 举报
回复
一个指针,指向你读/写文件的位置。
Hauk 2012-12-24
  • 打赏
  • 举报
回复
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); } } } } }
dalmeeme 2012-12-23
  • 打赏
  • 举报
回复
就是定位,比如设置值1000,然后执行读或写都是从这个位置开始的。
ZuiChunWeiQiao 2012-12-23
  • 打赏
  • 举报
回复
我以为position属性可以记录当前文件写入的位置,然后在新的filestream中定义写入位置就可以继续写了。

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧