FileStream和File的区别 后者比前者给内存带来压力大。
FileStream可以操作字节也就是可以保存任何类型的文件。
1.FileStream读文件操作
//OpenOrCreate:有就打开,没有就创建 //FileStream 3个参数的含义: 1.path 2,针对文件什么操作,3针对文件内容怎么操作 FileStream fsRead = new FileStream(@"D:extension_6_12.crx", FileMode.OpenOrCreate, FileAccess.Read); byte[]buffer=new byte[1024*1024*5];//1024*1024*5 只读取5M,不要写太大比如8G 那就内存溢出了。 //if file byte.length=3.8M //返回本次实际读取的有效字节数。 int r=fsRead.Read(buffer, 0, buffer.Length);//从0读,到最大内容长度5M. //将字节数组解码成字符串 string s = Encoding.Default.GetString(buffer,0,r); //只解码内容的部分 //关闭,GC垃圾回收处理器不会自己自动回收 fsRead.Close(); //释放资源 fsRead.Dispose(); Console.WriteLine(s); Console.ReadKey();
2.FileStream写文件操作
// 使用FileStream写入数据 using (FileStream fs=new FileStream(@"D:\new.txt",FileMode.OpenOrCreate,FileAccess.Write)) { string str="666666666666666666666"; byte[] buff = Encoding.UTF8.GetBytes(str); fs.Write(buff,0,buff.Length);//如果文件存在那么将,一个一个字符覆盖文件 } Console.WriteLine("写入文件"); Console.ReadKey();
3.多媒体文件的复制
将多媒体文件读出来,让后写入到另一个文件
string source = @"c:\zumba.mp3"; string targetSource = @"D:\zumba.mp3"; using (FileStream fsRead=new FileStream(source,FileMode.OpenOrCreate,FileAccess.Read)) { using (FileStream fsWrite=new FileStream(targetSource,FileMode.OpenOrCreate,FileAccess.Write)) { byte[] buffer = new byte[1024 * 1024 * 6]; //最多读取6M //文件比较大所以循环读取 //返回本次读取实际取代的字节数。 while (true) { int r = fsRead.Read(buffer, 0, buffer.Length); //如果返回长度0意味着读取完毕 if(r==0) { break; } fsWrite.Write(buffer, 0, r); } } }