当前位置: 首页 > 编程笔记 >

.NET中的IO操作之文件流用法分析

车诚
2023-03-14
本文向大家介绍.NET中的IO操作之文件流用法分析,包括了.NET中的IO操作之文件流用法分析的使用技巧和注意事项,需要的朋友参考一下

本文实例讲述了.NET中的IO操作之文件流用法。分享给大家供大家参考。具体分析如下:

读操作

//1.创建文件流

FileStream fsRead =new FileStream("1.txt",FileMode.Open);

//2.创建缓冲区,正常情况下,是不会直接等于文件大小的。这里只有读,所以就这么干了。

byte[] bytes =new byte[fsRead.Length];

//3.开始读取, 返回值是读取到的长度。

int r =fsRead.Read(bytes,0,bytes.Lenght);

//4.关闭释放流

fsRead.Close();

fsRead.Dispose();

写操作

//1.创建写入的文件流

FileStream fsWrite fsWrite =new FileStream(@"xxx",FileMode.OpenOrCreate);

//2.创建缓冲区

String msg ="HelloWorld";

byte[] bytes =Enconding.UTF8.GetBytes(msg);

//3.开始写入

fsWrite.Write(bytes,0,bytes.Length);

//4.关闭

fsWrite.Close();

fsWrite.Dispose();

byte数组与string之间的转换

在文件流写入的时候,经常需要string 和 byte数组之间的转换。
这里简单的描述一下,这方面的做法。

1.string 到 byte[]数组。

string msg ="HelloWorld";

//使用UTF8编码

byte[] bytes =System.Text.Encoding.UTF8.GetByte(msg);

//使用系统默认编码

byte[] bytes =System.Text.Encoding.Default.GetByte(msg);

 
2.byte[]到string
string newMsg =System.Text.Encoding.UTF8.GetString(bytes);

编码问题

为什么中文会乱码?
UTF8 编码中,一个中文字符占用两个字节。
GBK  编码中,一个中文字符占用三个字节。
UTF8 编码中,用两个字节保存一个汉字,如果你用GBK读取,按照三个字节一个字的格式去读。当然乱码了。反之也是一样的。

总结起来,无论是36码的鞋子,穿在50码的脚丫子上。还是36码的脚丫子,穿50码的鞋。看起来都不会很舒服。

所以,按照什么格式写入,就按照什么格式读取。才是正解。

PS:
1.Utf8是国际标准。
2.GB2312  是国标编码,支持中文的。
3.GBK是对GB2312的扩展,支持繁体中文。

什么类可以Dispose( )?

1.Dispose()表示释放资源,.NET中对Dispose()有一个统一的约定或者叫描述。这个约定表现为一个接口。

或者说这个接口,是一个红头文件,红头文件中约定了如何释放资源。
所有实现了IDisposable接口的类都可以释放,可以Dispose();

那么类库中什么样的类会实现IDisposable接口呢?
我的理解是这样的,一般仅占用托管堆中内存资源的类或对象。一般不需要Dispose()。垃圾回收就搞定了。
但是对于文件句柄,网络端口号,数据库连接等,CLR的垃圾回收机制是不管的。
所以一般这部分内容需要实现IDisposable接口。
文件流操作的异常处理

//只有把fs定义在这里,finally中才能引用得到。

FileStream fs =null;

try

{

     fs =new FileStream(@"文件路径",FileMode.Create);

     byte[] bytes = Encoding.Default.GetBytes("HelloWorld");

     fs.Write(bytes,0,byte.Length);

}

finally

{

     if(fs != null)  //如果fs未赋值,那么直接Dispose就会引发空指针异常。

     {

         fs.Dispose();

     }

}

简化上述的写法,虽然严谨但是稍微有点麻烦。Microsoft提供了语法糖。
就是using的语法
using(某个可以释放资源的类)

{

      操作

}

//1.操作执行完,会自动释放。

//2.using语句编译完成以后,会形成跟上面类似的代码。就是使用try  finally。

StreamWriter和StreamReader
//按行写入

StreamWriter sw =new StreamWriter(@"target",true,Encoding.GetEnconding("GB2312"));

sw.WriteLine("HelloWorld");

 

//按行读取

StreamReader sr =new StreamReader(@"Source");

sr.ReaderLine();  //每次返回一个字符串

希望本文所述对大家的.net程序设计有所帮助。

 类似资料:
  • 本文向大家介绍.Net中的json操作类用法分析,包括了.Net中的json操作类用法分析的使用技巧和注意事项,需要的朋友参考一下 本文实例展示了.Net中的json操作类用法,对于进行.Net程序设计来说是非常重要的技巧。具体分析如下: 首先需要引用 System.Web.Extensions.dll 这个类库 命名空间需要加上:System.Web.Script.Serialization  

  • 1. 打开和关闭文件 1.1 打开文件 访问文件前,需要使用用 Python 内置的 open() 函数打开一个文件: open(path, access_mode) path 是要访问的文件的路径名 access_mode 是文件的访问模式 可以是只读、读写、追加等模式,所有可能的取值见 1.2 小节 这个参数是可选的,缺省情况下,是以只读模式 r 打开文件 open 返回一个 file 对象

  • 本文向大家介绍Erlang IO编程之文件目录操作常用方法小结,包括了Erlang IO编程之文件目录操作常用方法小结的使用技巧和注意事项,需要的朋友参考一下 Erlang用于操纵文件I/O的模块有: file模块:打开、读、写、关闭文件已经操作目录的方法基本都在这里 filename模块:提供平台独立方式用于操纵文件名 filelib模块:file模块的扩展,提供了更多的实用工具,在file模块

  • 本文向大家介绍Java文件(io)编程之文件字符流使用方法详解,包括了Java文件(io)编程之文件字符流使用方法详解的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了文件字符流的使用方法,供大家参考,具体内容如下 案例1: 读取一个文件并写入到另一个文件中,char[] 来中转。 首先要在E盘下创建一个文本文档,命名为test.txt,输入一些字符串。 打开D盘的test.txt文件

  • 本文向大家介绍php文件操作之文件写入字符串、数组的方法分析,包括了php文件操作之文件写入字符串、数组的方法分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php文件操作之文件写入字符串、数组的方法。分享给大家供大家参考,具体如下: 场景一:用文本文档记录一些操作日志,因为对于一些频繁的操作,操作记录的数据量势必会很大,如果用数据库来存储会给数据库带来压力。 场景二:代替输出函数打印

  • 本文向大家介绍Python中操作文件之write()方法的使用教程,包括了Python中操作文件之write()方法的使用教程的使用技巧和注意事项,需要的朋友参考一下  write()方法把字符串str写入文件。没有返回值。由于缓冲,字符串可能不实际显示文件,直到flush()或close()方法被调用。 语法 以下是write()方法的语法: 参数     str -- 这是要被写入的文件中的字