在System.IO 命名空间内包含了对文件操作的支持,我的总结是:
1. 文件是以流的形式进行操作的,首先应创建文件流,FileStream代表了创建的文件流,创建FileStream多种方法。常用的是利用File和FileInfo两个类,都有返回FileStream的方法,区别是一个提供静态方法,一个提供实例方法。
2. FileStream可以直接操作文件,如写入,读出等,但只能以二进制的形式以BYTE内容进行,很不方便。
3. .NET提供了两种形式的控制FileStream的方法。BinaryReader, BinaryWriter类,以二进制的形式对文件流进行操作,读取时可返回各种类型的数据,但二进制形式的文件,字符串前是一个长度前缀。StreamReader和StreamWriter以编码方式对文件流进行操作,返回的只能是字符(数组)或字符串,这个两类分别从TextReader和TextWriter派生,从这两个类派生的还有操作字符串的两个类StringReader和StringWriter。 当然BinaryReader, BinaryWriter在操作字符或字符串时同样需要提供编解码方法。所以BinaryReader, BinaryWriter相比功能比较强大,但操作字符串有一个长度前缀,用记事本等打开时有乱码。
4. 只要是操作文件对象,都会要求提供以上操作流的对象或FileStream对象,比如序列化的XmlSerializer和BinaryFormatter的Serialize方法都要求提供一个文件流对象,也就是FileStream对象。原理上XmlSerializer、BinaryFormatter的Serialize方法和BinaryWriter、StreamWriter的操作文件实现原理是一致的。所以XmlSerializer的Serialize方法也可以提供一个StreamWriter对象(从TextWriter派生,也可以序列化进一个字符串)。