.NET中System.IO

1、目的

若自己编写程序玩玩,需要持久化数据,使用System.IO.Stream派生类持久化数据是一个不错的选择。另外,在WCF技术中,数据传递至远程计算机就需要将数据/对象序列化,因此,将System.IO及序列化的信息记录如下。

2、概况

System.IO中大多数成员包含在mscorlib.dll中,另外有一部分在System.dll中。其主要的功能是提供读/写文件、目录等的功能。以下为System.IO命名空间中的概况。

                     类说明
BinaryReader和BinaryWriter能够以二进制的形式读取和存储数据
BufferedStream给另一流上的读写操作添加一个缓冲层。无法继承此类。


Directory和DirectoryInfo
两者都是用于操作目录,区别在于:
Directory:
   public static class Directory
DirectoryInfo:
   public sealed class DirectoryInfo: FileSystemInfo
即,1、Directory是一个静态类,可以直接调用方法完成操作,DirectoryInfo是“正常”类,需要创建一个DirectoryInfo对象,才能使用操作文件夹的方法。
2、两者均不可被继承。
DriveInfo提供驱动器的信息访问
File和FileInfo两者都是对文件进行操作,区别可以参考Directory和DirectoryInfo的区别。
FileStream以操作文件为主的Stream,既支持同步读写操作,也支持异步读写操作。
FileSystemInfo是FileInfo和DirectoryInfo的基类
FileSystemWatcher侦听文件的更改,并在更改时引发事件
Path路径类,其对包含文件或目录信息的string字符串进行操作。跨平台
Stream 
StreamReader/StreamWriter按照一定的编码方式,以字节(byte)流的方式,操作文本信息
StringReader/StringWriterStringReader:从字符串中读取数据
StringWriter:向字符串中写入数据,该数据存储于StringBuilder中。
TextReader/TextWriter抽象类,是StringReader/Writer、StreamReader/Writer的父类
UnmanagedMemoryAccessor提供从托管代码中随机访问非托管内存块的能力
UnmanagedMenoryStream提供托管代码访问非托管内存块的能力

                                                表1  .NET的System.IO命名空间的概述

3、Directory(Info)&File(Info)

Directory(Info)与File(Info)可以实现对计算机中文件和目录的操作。不同的是Directory和File是abstract类,可以直接调用其方法;Info的两个是需要new出来使用的。

以下为4者UML关联图

    image

FileSystemInfo抽象类是一个全能奶爸,因为他是FileInfo(操作文件的类)和DirectoryInfo(操作路径的类)的父类,即,其必须包含:操作文件和路径的方法,文物双全!

3.1 FileSystemInfo抽象类

用于对文件或文件夹的操作。

其继承类,在第一次调用时会调用refresh()方法,获得文件或文件夹的特性,因此若想获得文件/文件夹的最新信息,需要调用refresh()方法。

FileSystemInfo的属性

                属性                      说明
Attributes是指当前的对象为文件还是文件夹,File还是Directory
CreationTime创建时间
Exists是否存在(bool)
Extension扩展名(string)
FullName完整目录
LastAccessTime上次访问的时间
LastWriteTime上次写入时间
Name对于文件:获得文件名称
对于目录:或得最后层次的文件夹名称

                                                 表2  FileSystemInfo属性

FileSystemInfo的方法

方法为:Delete()、Refresh()方法,其他方法继承自Object或MarshallByRefObject

4、DirectoryInfo类

4.1、构造函数

DirectoryInfo类只有一个构造函数,如下

public DirectoryInfo(string path)

path不能为null,否则会报:ArgumentNullException异常

path可以为     ”.”     ,表示当前应用程序的目录

4.2、属性

DirectoryInfo的属性比父类(FileSystemInfo)的属性多了2个。

             属性                                      说明
Parent获得上一级目录
Root获得根目录

4.3、方法

 返回类型方法名称备注
publicvoidCreate()创建目录,若已经存在则不作任何操作
publicDirectionaryInfoCreateSubdirectory(string path)创建一个或多个子目录,并返回最后一个目录的DirectoryInfo实例。
一个子目录:CreateSubdirectory(“test”);
多个:CreateSubdirectory(@”c:\test\test1\test2\test3”);创建了test1、test2、test3三个子目录,且当前的directoryInfo为test3所对应的对象
(2)、path不得为磁盘名称或UNC。
即不允许为“c:\directoryName\fileName”或
“file:\\server\project file.mpp”
public voidDelete()DirectoryInfo类中的Delete()方法已经完成重写。若DirectoryInfo为空,则完成删除,若删除非空的DirectoryInfo,则会报错。删除DirectoryInfo全部信息,需要使用Delete()的重载方法。
publicvoidDelete(bool  recursive)确定是否删除子目录和文件
true:删除此目录、子目录及文件
false:=delete()
publicDirectoryInfo[]GetDirectories()返回当前目录下所有子目录的DirectoryInfo数组。
publicDirectoryInfo[]GetDirectories(string searchPattern)按某种搜索条件查找加过。例如:*p*,查找文件夹名称包含p的。
publicDirectoryInfo[]GetDirectories(
string searchPattern,
SearchOption searchOption)
SearchOption :
TopDirectoryOnly:只查找当前目录
AllDirectories: 查找当前目录及子目录
publicFileInfo[]GetFiles()返回当前目录的文件列表
publicFileInfo[]GetFiles(string searchPattern);
GetFiles(
string searchPattern,
SearchOption searchOption
)
类比GerDirectories()方法
publicvoidMoveTo(string  destDirName)将DirectoryInfo对象移动到指定的新路径

5、Directory类

5.1 Directory类是静态类

public static class Directory

5.2 Directory类中只有方法,方法全部为static类型。没有属性--必然的,若有属性,则是鸡肋。

类型返回值方法名称备注
public DirectoryInfo CreateDirectory(string path ) 创建目录子目录
publicvoidDelete(string path)从指定路径中删除空目录
publicvoidDelete(stirng path, bool recursive )同DirectoryInfo中Delete(bool  recursive)
为true:删除指定目录的全部内容
为false:=Delete(string path)
publicboolExists(string path)判断指定的路径是否存在
publicDateTimeGetCreationTime(string path) 
publicstringGetCurrentDirectory()返回应用程序的当前路径
publicstring[]GetDirectories(string path)返回指定路径下所有子目录
  GetDirectories(
string path,
string searchPattern
)
从指定某路径的子目录中,按某条件(正则表达式)返回所有结果
publicstring[]GetFiles(string path)返回指定路径的所有的文件名称
  GetFiles(
string path,
string searchPattern
)
 
  GetFiles(
string path,
string serachPattern,
SearchOption searchOption
)
searchOption:
      TopDirectoryOnly  仅在当前目录
      AllDirectories  当前目录及子目录

6、DriveInfo类

6.1   DriveInfo类提供了驱动器信息

public sealed class DriveInfo : ISerializable

6.2   属性、方法

 名称说明
longAvailableFreeSpace{ get; } 可用空间
stringDriveFormat { get; } 驱动器类型 FAT32还是NTFS
DriveType DriveType { get; }  
boolIsReady { get; } 是否准备好
stringName { get; } 驱动器名称
DirectoryInfo RootDirectory { get; } 根目录驱动
stringVolumeLabel { get; set; } 驱动器卷标

方法

public static DriveInfo[] GetDrives()     //获得所有驱动器的驱动名称

7、FileInfo类

7.1 构造器

public FileInfo( string fileName )      //fileName不可为null

7.2 属性

类型返回值属性名称说明
publicDirectoryInfoDirectory { get; } 获取父目录的DirectoryInfo对象
 stringDirectoryName {get;}返回完整目录
 boolExists(string path)是否存在
 stringextension扩展名
 longlength文件大小
 stringname文件名称
 boolisReadOnly获取/设定只读属性

7.3 方法

 返回值方法名称说明
 StreamWriterAppendText()返回一个StreamWriter,用于写入数据
 StreamWriterCreateText()同上
 FileInfoCopyTo(string destFileName)将当前文件内容复制到指定文件中。若文件已经存在,则报:IOException异常,e.message信息为:文件“XX”已经存在
 FileInfoCopyTo(
string destFileName,
bool overwrite
)
同上,不过overwrite =true,则允许覆盖现有文件。
 FileStreamCreate()创建文件,默认是所有用户均由权限操作文件
 void MoveTo(string destFileName)将文件移动至制定的地方,并重命名
 FileStreamOpen(FileMode mode)FileMode :
CreateNew:创建新文件,若文件已经存在,则报异常
create:创建新文件,若文件已经存在,则覆盖。
Open:打开文件,若不存在,报异常
OpenOrCreate:打开文件,不存在则创建
Truncate:未知
Append:若文件存在,则打开文件并定位到文件尾;若不存在,则创建
 FileStreamOpen(
FileMode,
FileAccess,
FileShare)
同上,只不过是添加了一些权限、共享的限定。多种选择
 FileStreamOpenRead()创建只读的FileStream(将输入存在Stream中,且只能读取)
 FileStreamOpenWrite()创建只写的FileStream(存入Stream、只能将信息写入文件)
 StreamReaderOpenText()编码方式为:UTF-8,从当前文件读取数据的StreamReader对象
 voidRefresh()刷新,以换取FileInfo对象的最新状态
 FileInfo Replace(
string,
string,
bool
)
第一个参数:被替换的文件名称
第二个参数:被替换文件的备份名称
第三个参数:是否忽略合并错误

创建文件的方法:

方法一:使用FileInfo对象的Create()方法

方法二:使用StreamWriter.WriteLine()方法

FileInfo、DirectoryInfo提供对象,writer/reader提供读写的操作。

8、File类

8.1 类说明。其为操作文件的静态类

public static class File

8.2 方法

 返回值名称说明
 voidAppendAllLines(
string path,
IEnumerable<string> contents
)
向指定的文件追加内容,若文件不存在,则创建
 voidAppendAllLines(
String,
IEnumerable<string>,
Encoding
)
同上,不过以指定的编码方式追加文本
 voidAppendAllText(
string path,
string contents
)
同AppendAllLine(),不同之处是:一个是追加行,另一个是追加文本。
 voidAppendAllText(
string path,
string contents,
Encoding encoding
)
同上
 StreamWriterAppendText()创建一个StreamWriter,其编码方式为:UTF-8
 voidcopy(
string sourceFileName,
string destFileName
)
复制,但是目标文件不可以已经存在。
 voidCopy(String, String, Boolean) 
 FileStreamCreate(string path)创建一个文件,并返回FileStream,若文件不存在,则创建。
 FileStreamCreate(       
string path,       
int bufferSize
)
bufferSize 缓冲区的大小
 StreamWriterCreateText(string path)与FileInfo类的CreateText()略有不同,一个有参数,一个无
 byte[]ReadAllBytes(
string path
)
将二进制文件数据写入至字节数组中。
 stringReadAllText(
string path,
[Encoding encoding]
从某文件读取数据,[以某种编码方式]
 IEnumerable<string> ReadLines(
string path,
[Encoding encoding]
)
读取每行数据,将数据存放在可枚举泛型集合
 voidWriteAllBytes(
string path,
byte[] bytes
)
写入数据
 voidWriteAllLines(
string path,
IEnumerable<string> contents,
[Encoding encoding]
)
写入数据
 voidWriteAllText(
string path,
string contents,
[Encoding encoding]
)
写入数据

9、Stream类

public abstract class Stream : MarshalByRefObject,  IDisposable

9.1 Stream抽象类的说明

Stream是所有流的抽象基类,流是字节序列的抽象概念

9.2、方法

 返回名称说明
 voidClose()释放所有资源。此方法调用Dispose()方法。若流已经关闭,调用Close方法不会产生异常,但若调用其他方法,会产生异常。
 voidFlush清空缓冲区域,并将数据写入
 intread(
byte[] buffer,
int offset,
int count
)
缓冲区中总字节数。
 intReadByte()每执行该方法,流内位置前推一个字节,返该位置。若达到流的尾部,则返回-1
 longSeek(
long offset,
SeekOrigin origin
)
设置当前流的位置
offset:偏移量,可为正可为负
origin:参考点。Begin、Current、End
 voidSetLength(
long length
)
设定流的长度
 voidWrite(
byte[] buffer,
int offset,
int count
)
写入
 voidWriteByte(
byte value
)
写入一个字节,并将当前位置增一

9.3 属性

名称说明
CanRead { get; } 是否可读,bool
CanSeek { get; } 是否支持查找,bool
CanWrite { get; } 是否可写,bool
Length { get; } 返回长度,long
Position { get; set; } 当前位置,long
CanTimeout { get; } 当前流是否具有超时功能,bool
ReadTimeout { get; set; } 设定读超时时间,int
WriteTimeout { get; set; } 设定写超时时间,int

10、FileStream类

FileStream类所包含的方法或属性与Stream类相同,不列举。

FileStream类其只能读取/写入byte数据(字节或字节数组),因此用处不大。

11、TextReader/TextWriter抽象类

image

11.1 TextReader抽象类的方法

类型返回值方法名称说明
 voidClose()释放所有资源
 intPeek()查看流中是否有字符,若到流的尾部了或此流不支持查找,则返回-1
 intRead()读入下一个字符,若到尽头,则返回-1
 intread(
char[] buffer,
int index,
int count
)
从index开始,共count个字符数据写入至buffer数组中。若至流的尾部,则返回0.(与Read()方法不同
 int ReadBlock(
char[] buffer,
int index,
int count
)
从index开始,将count数量的字符写入至buffer字符数组。返回目前已经写入的数量。(其最大值等于count)
 stringReadLine()读取一行string,若到流的结尾,则返回null
 stringReadToEnd()读取从当前Position位置开始,至TextReader结尾的所有内容。

11.2 TextWriter抽象类

image

TextWriter抽象类的方法

 返回类型名称说明
 voidWrite(
string format,
Object object
)
写入
 void WriteLine(object)写入

TextWriter抽象类中,主要是Write、WriteLine方法,两者的参数是一样的。

参数主要有以下:

1、object(int 、string、char、….object)

2、(String,Object[])、(String Object)前一个参数为格式,后一个参数为写入流的内容

3、(char[], index, count),从index开始的count数量的char[]数组中的字符,写入至流中

4、(String, object1、object2、[object3]),按照某种格式,将和三为一。

【备注】:Console.WriteLine、Console.ReadLine就是Console.Out / In 属性分别包装了一个TextWrite.WriteLine/ ReadLine方法。

【完】

转载于:https://my.oschina.net/u/144357/blog/175353

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值