1.FileStream 1.FileStream FileStream操作的是字节数组, 读写文本需配合Encoding ( 如: UTF8) 转换1 ) . 构造函数 这是使用FileStream的第一步, 用于打开/ 创建文件并指定操作模式// 参数:文件路径、文件模式、文件访问权限、文件共享方式 FileStream fs= new FileStream ( "test.txt" , FileMode. OpenOrCreate, // 不存在则创建,存在则打开 FileAccess. ReadWrite, // 可读可写 FileShare. None// 不允许其他程序共享 ) ;
2 ) . 读取字节( Read ( ) / ReadAsync ( ) ) a. Read ( byte [ ] buffer, int offset, int count) : 从流中读取字节到缓冲区, 返回实 际读取的字节数(到文件末尾时返回0 ) b. ReadAsync: 异步版本,避免阻塞主线程(适合大文件)using System ; using System. IO ; using System. Text ; class Program { static void Main ( ) { // 确保文件存在并写入测试内容 File. WriteAllText ( "test.txt" , "Hello FileStream!" ) ; using ( FileStream fs= new FileStream ( "test.txt" , FileMode. Open, FileAccess. Read) ) { byte [ ] buffer= new byte [ 1024 ] ; // 缓冲区,存储读取的字节 int bytesRead; // 实际读取的字节数 StringBuilder sb= new StringBuilder ( ) ; // 循环读取,直到文件末尾(bytesRead=0) while ( ( bytesRead= fs. Read ( buffer, 0 , buffer. Length) ) > 0 ) { // 将字节转换为字符串(UTF8编码) string content= Encoding. UTF8. GetString ( buffer, 0 , bytesRead) ; sb. Append ( content) ; } Console. WriteLine ( "读取的内容:" + sb. ToString ( ) ) ; // 输出:读取的内容:Hello FileStream! } } } 3 ) . 写入字节: Write ( ) / WriteAsync ( ) a. Write ( byte [ ] buffer, int offset, int count) : 将缓冲区中的字节写入流 b. WriteAsync: 异步写入, 适合大文件/ 高并发场景using System ; using System. IO ; using System. Text ; class Program { static void Main ( ) { string content= "这是要写入的测试内容" ; // 将字符串转换为字节数组(UTF8编码) byte [ ] buffer= Encoding. UTF8. GetBytes ( content) ; using ( FileStream fs= new FileStream ( "test.txt" , FileMode. Create, FileAccess. Write) ) { // 写入字节数组(从索引0开始,写入全部长度) fs. Write ( buffer, 0 , buffer. Length) ; Console. WriteLine ( "内容写入完成!" ) ; } // 验证写入结果 Console. WriteLine ( "文件内容:" + File. ReadAllText ( "test.txt" ) ) ; // 输出:文件内容:这是要写入的测试内容 } } 4 ) . 调整流位置: Seek ( ) Seek ( long offset, SeekOrigin origin) : 调整文件指针的位置, 用于随机读写(比如跳 过前N个字节、回到文件开头) a. offset: 偏移量( "正数向后,负数向前" ) b. SeekOrigin: 偏移原点( "Begin/Current/End" ) using System ; using System. IO ; using System. Text ; class Program { static void Main ( ) { File. WriteAllText ( "test.txt" , "0123456789" ) ; using ( FileStream fs= new FileStream ( "test.txt" , FileMode. Open, FileAccess. Read) ) { // 1. 定位到第3个字节(跳过前2个:0、1) fs. Seek ( 2 , SeekOrigin. Begin) ; byte [ ] buffer= new byte [ 2 ] ; fs. Read ( buffer, 0 , 2 ) ; Console. WriteLine ( Encoding. UTF8. GetString ( buffer) ) ; // 输出:23 // 2. 从当前位置向后移动1个字节 fs. Seek ( 1 , SeekOrigin. Current) ; fs. Read ( buffer, 0 , 2 ) ; Console. WriteLine ( Encoding. UTF8. GetString ( buffer) ) ; // 输出:45 // 3. 定位到文件末尾前2个字节 fs. Seek ( - 2 , SeekOrigin. End) ; fs. Read ( buffer, 0 , 2 ) ; Console. WriteLine ( Encoding. UTF8. GetString ( buffer) ) ; // 输出:89 } } } 5 ) . 刷新缓冲区: Flush ( ) / FlushAsync ( ) FileStream会将写入的字节先存入内存缓冲区, 达到一定大小后才写入磁盘。Flush ( ) 强制将 缓冲区的所有数据立即写入磁盘(避免数据丢失)using ( FileStream fs= new FileStream ( "test.txt" , FileMode. Create, FileAccess. Write) ) { byte [ ] buffer= Encoding. UTF8. GetBytes ( "测试Flush" ) ; fs. Write ( buffer, 0 , buffer. Length) ; fs. Flush ( ) ; // 强制写入磁盘 Console. WriteLine ( "缓冲区已刷新到磁盘" ) ; } 6 ) . 释放资源: Close( ) / Dispose( ) a. Close ( ) :关闭流并释放资源(等价于Dispose ( ) )。 b. Dispose ( ) :释放流占用的所有资源(文件句柄、内存等)7 ) . 复制流:CopyTo( ) / CopyToAsync( ) 将当前FileStream的内容复制到另一个流(比如复制文件)using ( FileStream source= new FileStream ( "source.txt" , FileMode. Open, FileAccess. Read) ) using ( FileStream target= new FileStream ( "target.txt" , FileMode. Create, FileAccess. Write) ) { // 将source的内容复制到target source. CopyTo ( target) ; Console. WriteLine ( "文件复制完成!" ) ; }