C#文件I/O操作:Stream类详解

2 下载量 11 浏览量 更新于2024-08-28 收藏 74KB PDF 举报
"本文主要介绍了C#中的文件I/O基本操作,包括文件的定义、流的概念,以及Stream类和其派生类的应用。文件是永久存储的字节序列,流则提供了一种读写字节的方式,使得程序员可以对各种类型的存储进行抽象处理,无需关心底层实现。" 在C#中,进行文件的输入/输出(I/O)操作时,通常会涉及到System.IO命名空间中的类和方法。这个命名空间提供了对文件和流操作的支持,包括读取、写入和管理文件路径等。系统默认使用mscorlib程序集,该程序集包含在mscorlib.dll中。 Stream类是所有流对象的抽象基类,它定义了读取、写入和定位的基本操作。Stream类集成有异步支持,即通过其异步方法实现同步读写。Stream的派生类,如MemoryStream和FileStream,分别代表内存和文件上的流。MemoryStream允许在内存中进行I/O操作,而FileStream则对应于文件系统。 Stream类的CanRead、CanWrite和CanSeek属性用于指示流是否支持读取、写入和查找操作。例如,某些流可能只支持读或写,而不支持查找,如NetworkStream。Stream类还提供了Position属性,用于获取或设置流中的当前位置。 在实际编程中,我们经常使用Stream的派生类来处理具体任务。例如,以下代码示例展示了如何使用MemoryStream进行数据块的写入和读取: ```csharp using System; using System.IO; public class Block { public static void Main() { MemoryStream s = new MemoryStream(); // 创建一个内存流 for (int i = 0; i < 100; i++) { s.WriteByte((byte)i); // 将字节写入流 } s.Position = 0; // 设置流的位置为开始 byte[] bytes = new byte[1000]; // 定义读取的字节数组 int numBytesToRead = (int)s.Length; // 获取要读取的字节数 s.Read(bytes, 0, numBytesToRead); // 从流中读取数据 } } ``` 这段代码首先创建了一个MemoryStream对象`s`,然后将一系列字节写入流中,接着将流的位置重置到开始,最后读取流中的数据到一个字节数组中。 除了MemoryStream和FileStream,还有其他派生类如FileStream用于与磁盘文件交互,NetworkStream用于网络通信,以及GZipStream和DeflateStream用于数据压缩等。这些类共同构成了C#中丰富的文件I/O和流处理能力,为开发者提供了高效且灵活的数据操作手段。