FileStream,顾名思义,文件流。流,是字节流。我的理解是,硬盘上存在一个字节流,内存里也有一个字节流,它们是对应的。程序运行时,我们只能对内存里的字节流直接操作,在它被关闭的时候,它的内容自动写入硬盘上的相应字节流。
复制一个文件的基本思路是:逐一读取原文件流的字节,逐一写入新文件流中。分别用到文件流的ReadByte()和WriteByte()方法。这里要注意的是,读取时以字节为单位,一个字节如下图所示
是一个0和1组合的序列。ReadByte()读取一个字节后将这个序列求值,返回的是整形数值。如果读到文件的尽头了,不能成功读取字节了,返回的是-1。这个设计是非常合理的。因为只要是个字节,总是能求出它大于或等于0的值的。没有字节了,就返回-1了。这样的话,可以把-1作为循环读取终止的标志。
我下面以一个图片文件的复制为例讲解。
在C盘新建一个画图文件,另存为png格式,文件名pic1。
然后执行以下代码:
using System; using System.IO; namespace Demo { class Program { public static void Main(string[] args) { FileStream fs1 = new FileStream("c:/pic1.png",FileMode.Open);//FileAccess is dispensable. //FileAccess is the extra contract. FileStream fs2 = new FileStream("c:/pic2.png",FileMode.Create); int d; byte b; while( ( d = fs1.ReadByte() ) != -1 ) { b = (byte)d; fs2.WriteByte( b ); } fs1.Close(); fs2.Close(); Console.Write("Press any key to continue . . . "); Console.ReadKey(true); } } }
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。