C#文件I/O操作详解:System.IO流的使用

1 下载量 124 浏览量 更新于2024-09-01 收藏 72KB PDF 举报
"这篇资源主要介绍了C#中的文件I/O基本操作,重点在于System.IO命名空间中的Stream类及其派生类的应用,包括读取、写入和定位等操作。" 在C#编程中,文件输入/输出(I/O)是处理数据存储和检索的核心部分。`System.IO`命名空间提供了各种类,用于处理文件和数据流,使得开发者能够方便地与文件系统进行交互。`System.IO`中的核心抽象是`Stream`类,它定义了读取、写入和查找字节的基本操作。 **Stream类** `Stream`类是所有数据流类的基类,它定义了一组通用的方法和属性,如`Read`, `Write`, `Seek`, `CanRead`, `CanWrite`和`CanSeek`等。`Stream`类不直接处理具体的数据源,而是提供了一个统一的接口,隐藏了底层数据源的复杂性,如文件、内存、网络连接等。开发者可以根据需要选择不同的派生类来处理不同类型的流。 **Stream的派生类** 1. **FileStream**: 这是用于与文件进行交互的类。通过`FileStream`,开发者可以读取、写入或追加文件内容。`FileStream`支持`CanRead`, `CanWrite`和`CanSeek`操作。 2. **MemoryStream**: 它使用内存作为数据源或存储,适用于处理小量数据或临时存储。`MemoryStream`可以在内存中动态扩展,且不涉及实际的磁盘操作。 3. **NetworkStream**: 用于网络通信,如TCP/IP套接字。它通常只支持`CanRead`和`CanWrite`,而不支持`CanSeek`。 **基本文件I/O操作示例** 以下代码展示了如何使用`MemoryStream`进行基本的读写操作: ```csharp using System; using System.IO; public class Block { public static void Main() { MemoryStream s = new MemoryStream(); // 创建一个MemoryStream实例 for (int i = 0; i < 100; i++) { s.WriteByte((byte)i); // 向流中写入字节 } s.Position = 0; // 将流的位置重置到开头 // 从流中读取数据 byte[] buffer = new byte[100]; int bytesRead = s.Read(buffer, 0, buffer.Length); // 打印读取的数据 for (int j = 0; j < bytesRead; j++) { Console.Write($"{buffer[j]} "); } } } ``` 在这个例子中,我们首先创建了一个`MemoryStream`对象`s`,然后向其中写入100个字节,每个字节代表当前循环迭代的索引。接着,我们重置流的位置到开头,并使用`Read`方法读取数据到缓冲区`buffer`。最后,我们将读取的字节打印出来。 理解并熟练使用C#的文件I/O操作对于开发涉及数据持久化、文件处理和网络通信的应用至关重要。通过`System.IO`命名空间提供的工具,开发者可以方便地实现数据的读取、写入、追加、移动和删除等操作,同时利用异步功能提高程序性能。