Jack's Notes2——文件系统数据操作

流是序列化设备的抽象表示。

 

一、System.IO命名空间中包含的类:

重点的类如下:

File

Directory

Path

FileInfo

DirectoryInfo

FileStreamInfo

FileStream

StreamReader

StreamWriter

FileSystemWatcher

 

二、File类常用的静态方法:

Copy() 将文件从原位置复制到目标位置

Create() 在指定的路径上创建文件

Delete()

Open() 返回指定路径上的FileStream对象

Move()

 

三、Directory类常用的静态方法:

CreateDirectory()

Delete() 删除指定的目录及其中的所有文件

GetDirections()

EnumerateDirectories() GetDirectories()类似,但返回目录名的IEnumerable<string>集合

GetFiles()

EnumerateFiles()

GetFileSystemEntries() 返回在指定目录中的文件和目录名的string对象数组

EnumerateFileSystemEntries()

Move()

 

四、FileInfo

FileInfo类不像File类,它不是静态的,没有静态方法,仅可用于实例化的对象。FileInfo对象表示磁盘或网络位置上的文件。提供文件路径就可以创建一个FileInfo对象:

         FileInfo aFile = new FileInfo(@”C:\Log.txt”);

         FileInfoFile,在大多数情况下使用什么技术并不重要,但下面的规则有助于确定哪种技术更适合:

l  如果仅进行单一方法的调用,则可以使用静态File类的方法。在此,单一调用要快一些,因为.NET Framework不必实例化新对象,再调用方法。

l  如果应用程序在文件上执行几种操作,则实例化FileInfo对象并使用其方法就更好一些。这节省时间,因为对象已经在文件系统上引用正确的文件,而静态类必须每次都寻找文件。

FileInfo类也提供了与底层相关的属性,其中一些属性可以用来更新文件,其中很多属性都继承者自FileSystemInfo,所以可以应用于FileDirectory类。

FileSystem类的属性如下:

Attributes  使用FileAttributes枚举,获取或设置当前文件或目录的特性

CreationTime,CreationTimeUtc  获取当前文件的创建日期和时间,可以用UTC和非UTC版本

Extension  提取文件扩展名,只读

Exists

FullName 索取文件的完整路径,只读

LastAccessTime  获取或设置上次访问当前文件的日期和时间,可以使用UTC和非UTC版本

LastAccessTimeUtc

LastWriteTime  获取或设置上次写入当前文件的日期和时间,可以使用UTC和非UTC版本

LastWriteTimeUtc

Name  索取文件的完整路径,只读抽象属性,在FileInfoDirectoryInfo中进行了重写

         FileInfo的专用属性:

Directory  检索一个DirectoryInfo对象,表示包含当前文件的目录。只读

DirectoryName  返回文件目录的路径。只读

IsReadOnly  文件只读特定的快捷方式。这个属性也可以通过Attributes来访问

Length  获取文件容量(以字节为单位),返回long值。只读

         FileInfo对象本身不表示流。要读写文件,必须创建Stream对象。FileInfo对象提供了几个返回实例化Stream对象的方法来帮助做到这一点。

 

五、DirectoryInfo

         DirectoryInfo专用属性

Parent  检索一个DirectoryInfo对象,表示包含当前目录的目录。只读

Root  根目录

         可以使用Directory.GetCurrentDirectory()找出工作目录的当前设置,也可以使用Directory.SetCurrentDirectory()设置新路径。

 

六、FileStream对象

         这个类提供了在文件中读写字节的方法,但经常使用StreamReaderStreamWriter执行这些功能。这是因为FileStream类操作的是字节和字节数组,而Stream类操作的是字符数据。字符数据易于使用。但有些操作,如随机文件访问(访问文件中间某点的数据),就必须由FileStream对象执行。

         构造函数:

         1FileStream aFile = new FileStream(filename,FileMode.Member);

FileMode枚举指定了如何打开或创建文件

         2FileStream aFile = new FileStream(filename,FileMode.Member,FileAccess.Member);

FileAccess枚举指定了流的作用,其成员有ReadWriteReadWrite

         FileFileInfo类都提供了OpenRead()OpenWrite()方法,更易于创建FileStream对象。

         Seek()方法实现了随机读取

         .NET 4引入了一个新的名称空间System.IO.MenoryMappedFiles,它包含的类型(如MemoryMappedFile)提供了另一种随机访问特大文件的方式。

         处理原始字节的功能使FileStream类可以用于任何数据文件,而不仅是文本文件。

         FileStream对象的Read()方法获取的字节数组可以使用System.Text名称空间的Decoder类转为字符数组。例:

         Decoder d = Encoding.UTF8.GetDecoder();

         d.GetChars(byData,0,byData.Length,charData,0);

         向随机文件写入数据,首先要创建一个字节数组;最简单的办法是首先用String类的ToCharArray()静态方法构建要写入文件的字符数组,然后使用Encoder对象将其转为字节数组。例:

         CharData = “My pink half of the drainpipe.”.ToCharArray();

         Encoder e = Encoding.UTF8.GetEncoder();

e.GetBytes(charData,0,charData.Length,byData,0,true);

 

七、序列化对象

         .NET FrameworkSystem.Runtime.SerializationSystem.Runtime.Serializaioin.Formatter名称空间中提供了序列化对象的基础架构。

System.Runtime.Serialization.Formatters.Binary:这个名称空间包含了BinaryFormatter类,它能把对象序列化为二进制数据,把二进制数据序列化为对象。

IFormatter接口提供了如下两个方法:

void Serialize(Stream stream,object source)

object Deserialize(Stream stream)

         使用BinaryFormatter进行序列化非常简单:

IFormatter serializer = new BinaryFormatter();

serializer.Serialize(myStream,myObject);

         反序列化也很简单:

IFormatter serializer = new BinaryFormatter();

MyObjectType myNewObject = serializer.Deserialize(myStream) as MyObjectType;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值