C# FileStream简单介绍和使用
本章讲述:filestream类的基本功能,以及简单示例;
1、引用命名空间:using system.io;
2、注意:使用io操作文件时,要注意流关闭和释放问题!
强力推荐:将创建文件流对象的过程写在using当中,会自动帮助我们释放资源;
使用try{} catch(exception ex){} 进行一次捕获;
3、filestream 操作字节,可以操作任何类型的文件;下面来简单介绍filestream类的方法和参数:
(1)filestream() 作用:创建filestream对象,参数:第一个是路径,第二个是文件模式filemode枚举,第三个数据模式fileacess
filestream(string, filemode): filestream(string, filemode, fileaccess) filestream(string, filemode, fileaccess, fileshare) filestream(string, filemode, fileaccess, fileshare, int32)
初始化filestream时使用包含文件共享属性(system.io.fileshare)的构造函数比使用自定义线程锁更为安全和高效
(2)filemode(以何种方式打开或者创建文件):createnew(创建新文件)、create(创建并覆盖)、open(打开)、openorcreate(打开并创建)、truncate(覆盖文件)、append(追加);
(3)fileacess(文件流对象如何访问该文件):read(只读) 、write(写)、readwirte(读写);
(4)fileshare(进程如何共享文件):none(拒绝共享)、read 、write、readwrite(同时读写)、delete;
(5)buffersize(缓冲区大小设置)
4、stream.read(array<byte[], int32, int32):从流中读取一块字节,并将数据写入给定的缓冲区;
5、stream.write(array<byte[], int32, int32):使用缓冲区中的数据将字节块写入此流;
6、close():关闭当前流并释放与当前流关联的任何资源(如套接字和文件句柄);
7、dispose():释放流所有使用的资源;
8、copyto(stream):从当前流中读取所有字节并将其写入目标流。
copyto(stream, int32):从当前流中读取所有字节,并使用指定的缓冲区大小将它们写入目标流
9、seek()(filestream类维护内部文件指针,该指针指向文件中进行下一次读写操作的位置):将此流的当前位置设置为给定值。(stream.seek(int64,seekorigin)
第一个参数规定文件指针以字节为单位的移动距离。第二个参数规定开始计算的起始位置;seekorigin枚举包含3个值:begin、current 和 end;
例如:afile.seek(0, seekorigin.end);
10、由于设置了文件共享模式为允许随后写入,所以即使多个线程同时写入文件,也会等待之前的线程写入结束之后再执行,而不会出现错误
11、简单示例1:简单文件写入
filestream devstream = new filestream(devpath, filemode.append, fileaccess.write, fileshare.readwrite,512); devstream.write(data, 0, 128); if(devstream != null) devstream.close();
12、简单示例2:以追加的方式写入文件
public static class monitdata { public static string devpath = string.empty; private static object objlock = new object(); public static void writeinfo(byte[] data) { lock (objlock) { if (!string.isnullorempty(devpath)) { byte[] bytearray = new byte[128]; array.copy(data, 0, bytearray, 0, 128); if (bytearray != null && bytearray.length == 128) { using (system.io.filestream fs = system.io.file.openwrite(devpath)) { fs.seek(0, seekorigin.end); fs.write(bytearray, 0, bytearray.length); fs.close(); fs.dispose(); } } } } } }
13、简单示例:文件流写入
public static void main(string[] args) { string str = @"e:\下载\软件"; stopwatch sw = new stopwatch(); sw.start(); using (filestream fswriter = new filestream(str + @"\opencv-3.0.exe", filemode.create, fileaccess.write)) { using (filestream fsreader = new filestream(str + @"\opencv-2.4.9.exe", filemode.open, fileaccess.read)) { byte[] bytes=new byte[1024*4];//4kb是合适的; int readnum; while((readnum=fsreader.read(bytes,0,bytes.length))!=0)//小于说明读完了 { fswriter.write(bytes,0,readnum); fswriter .flush();//清除缓冲区,把所有数据写入文件中 fswriter.close(); fswriter.dispose(); } } } sw.stop(); console.writeline("总的运行时间为{0}",sw.elapsedmilliseconds); console.readkey(); }
14、简单示例:读取文件
public static string filestreamreadfile(string filepath) { byte[] data = new byte[100]; char[] chardata = new char[100]; filestream file = new filestream(filepath, filemode.open); //文件指针指向0位置 file.seek(0, seekorigin.begin);//可以设置第一个参数 //读入两百个字节 file.read(data, 0, (int) file.length); //提取字节数组 decoder dec = encoding.utf8.getdecoder(); dec.getchars(data, 0, data.length, chardata, 0); file.close(); file.dispose(); return convert.tostring(chardata); }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
下一篇: WinXP 系统安装图文教程(中)
推荐阅读
-
Docker安装和简单使用入门教程
-
tftpd64怎么用?tftpd64汉化版使用方法简单介绍
-
格式工厂怎么合并视频和音频?使用格式工厂合并视频和音乐教程详细介绍
-
AMD异步模块定义介绍和Require.js中使用jQuery及jQuery插件的方法
-
rootkit的检测工具使用介绍(chkrootkit和rootkit hunter)
-
解析iOS应用的UI开发中懒加载和xib的简单使用方法
-
C#关于Func和Action委托的介绍详解
-
CorelDRAW10 图纸工具的简单使用方法介绍
-
纯Python开发的nosql数据库CodernityDB介绍和使用实例
-
PHP ignore_user_abort函数详细介绍和使用实例