数据存取技术篇

文件与注册表存取技术

C#将每个文件看做顺序字节流,每个文件以一个文件结束标志或者特殊的字节符结束。

Console.In:返回标准的输入流对象,使得程序能够从键盘读取数据

Console.Out:返回标准的输出流对象,使得程序能够像屏幕输出数据

Console.Error:返回标准的而错误流对象

System.IO.Stream提供了将流表示成字节的功能。

FileStream:读写文件

MemoryStream:读写内存

BufferedStream:缓冲区的读写数据

 

目录管理:(DirectoryInfo类)

Directory类包含了用于创建、移动、删除和美剧目录子目录的成员集。基类为:FileSystemInfo。

成员:

Create()创建目录,参数:路径名

CreateSubdirectory():创建子目录集。参数:路径名

CopyDirectory():给定两个目录路径,将源目录复制到新路径

Delete():删除目录及其所有内容

GetFiles():提取一个FileInfo类型的额数组,表示给定目录中的文件集

MoveTo():将目录及其内容转移到新的路径中

Parent属性:提取给定路径的父目录

Root属性:返回给定路径的根目录

Exists属性:返回是否已经存在

 

 

Attributes 返回和文件相关的属性值,运用了FileAttributes枚举类型值
CreationTime 返回文件的创建时间
Exists 检查文件是否存在于给定的目录中
Extension 返回文件的扩展名
LastAccessTime 返回文件的上次访问时间
FullName 返回文件的绝对路径
LastWriteTime 返回文件的上次写操作时间
Name 返回给定文件的文件名
Delete() 删除一个文件的方法,请务必谨慎地运用该方法
DirectoryInfo dir1 = new DirectoryInfo(@"F:\Test");
Console.WriteLine("Full Name is : {0}", dir1.FullName);
Console.WriteLine("Attributes are : {0}", dir1.Attributes.ToString());

 

 

目录管理处最重要的思想就是递归。利用递归循环思想,可以遍历所有目录。

要执行目录删除可以利用DirectoryInfo类的Delete()方法。但是如果目录是只读类型的删除将会发生异常。

是同Dirctory类,同样乐意实现目录管理。Directory静态成员的功能同DirectoryInfo类似。只是Directory类返回字符串,而不是像DiInfo类返回类型FileInfo或者DirctoryInfo对象。

FileInfo[] files=(new DirectoryInfo(C:\\)).GetFiles();

String[] files =Directory.GetFiles("C:\\");

类似,区别仅仅是返回内容的类型不同。

 

文件管理:FileInfo类。

Directory:获得父目录的一个实例

DirectoryName:获得父目录的全路径

Length:获得当前文件或目录的大小

Name:返回文件名

AppendText():创建一个StreamWriter类型,将其文本同文件关联起来。

CopyTo():复制一个已有文件为一个新文件

Create()创建一个新文件,返回一个FileStream类型,同新创建的文件交互。

CreateText():创建一个StreamWriter类型,用于写一个新的文本文件

Delete()删除一个FileInfo类型的文件

MoveT0():将制定文件移动到新的位置

Open():打开一个新的文件

OpenRead()创建一个只读的FileStream

OpenText()创建一个StreamReader类型,从已有的文件读取信息

OpenWrite()方法,创建一个只写FileStream类型

 

C#中@表示后面的作为字符串处理。如

@"c:\test.txt"等同于"c:\\test.txt"

 

使用FileInfo类的时候,必须先创建一个该类的对象,并且为对象的方法传递相应的参数。

MoveTo不支持覆盖已存在文件的方法。

 

要打开文件,可以使用FileInfo.Open()方法,但注意的是打开之后的类型是FileStream。如: FileStream MyStream=MyFile.Open(FileMode.Open,FileAcess.Read,FileShare.None)

File 类的功能同FileInfo类的类型类似。其静态成员的功能与FileInfo类一样。

 

驱动器管理:DriveInfo类

 

读写文件:Stream类位于System.IO命名空间,是一个抽象类,支持对于字节的续写操作由于Stream类是一个抽象类。因此在使用的时候,需要多起进行派生,重载其抽象成员。

  1. 读操作:即从六种读取数据,将读取的数据存到另一种数据结构中。
  2. 写操作:将数据写入流中。
  3. 搜索操作:从流的而当前位置开始搜索,定位到指定的位置

     

Method/ Properties

描述

void Close()

关闭流

void Flush()

清理流中的内容,清除所有缓冲区,并将缓冲区的内容写入到储存设备中。

int ReadByte()

返回一个整数表示输入的字节数,如果没有数据返回-1

int Read(byte[ ] buf,int offset, int numBytes)

  将numBytes个字节读入到byte[ ]的以offset为起始位置,返回读入成功的字节数

Long Seek(long offset,SeekOrigin origin)

将当前位置定位到以origin为初始位置以后的offset处.

void WriteByte(byte b)

将单个字节写入到一个输出流.

void Write(byte[ ] buf,int offset, int numBytes)

写入buf,byte[ ] 中从offset开始的numBytes个字节.

bool CanRead

是否可读

bool CanSeek

是否支持寻址

bool CanWrite

是否可以写入数据

long Length

流的长度

long Position

流的当前位置.

 

FileStream类继承了Stream类的方法和属性,这些方法和属性在操作流时非常有用。一般可以按如下的操作顺序处理文件流类。

1.创建一个文件流

通过使用FileStream的构造函数,或者像开头几节介绍的那样,通过File或FileInfo类的相关方法返回一个FileStream对象实例。

FileStream类提供了15种重载的构造函数,一些比较常使用的构造函数的声明如下所示。

//使用指定的路径和创建模式创建FileStream类的实例

public FileStream(string path, FileMode mode);

//使用指定的路径和创建模式,以及访问权限创建FileStream类的实例

public FileStream(string path, FileMode mode, FileAccess access);

//使用指定的路径和创建模式,以及共享权限创建FileStream类的实例

public FileStream(string path, FileMode mode, FileAccess access, FileShare share);

FileMode、FileAccess与FileShare都是枚举类型。

FileMode指定创建文件流实例时,打开指定文件时的模式,有如下几种可选值。

—     Append:打开文件并定位到文件尾,或创建新文件。

—     Create:创建新的文件,如果文件存在,则被覆盖。

—     CreateNew:创建新的文件,如果文件存在,则引发IOException。

—     Open:打开现有文件,如果文件不存在,则引发FileNotFoundException。

—     OpenOrCreate:打开文件,如果不存在,创建新文件。

—     Truncate:打开现有文件,并将打开的文件截断为0字节大小。

FileAccess用于指定读和写的访问权限。有如下几种可选值。

—     Read:对文件的读访问。

—     ReadWrite:对文件的可读写访问。

—     Write:对文件的写访问。

FileShare指定共享访问权限。共享访问权限是指:有多个人同时对某一文件进行并发操作的使用权限。有如下几种可选值。

—     Delete:允许随后的请求删除文件。

—     Inheritable:使文件名柄由子进程继承。

—     None:文件以独占方式打开,关闭前,任何请求都将失败。

—     Read:允许其他请求读取。

—     ReadWrite:允许其他请求读取和写入。

—     Write:允许其他人写入

 

C#

public override int Read(

    byte[] array,


					int offset,


					int count

)

参数

array 类型:array<System..::.Byte>[]()[]此方法返回时包含指定的字节数组,数组中 offset 和 (offset + count - 1) 之间的值被从当前源中读取的字节替换。

offset 类型:System..::.Int32array 中的字节偏移量,将在此处开始读取字节。

count 类型:System..::.Int32最多读取的字节数。

public override void Write(

byte[] array,

int offset,

int count

)

array 类型:array<System..::.Byte>[]()[]包含要写入该流的数据的缓冲区。

offset 类型:System..::.Int32array 中的从零开始的字节偏移量,从此处开始将字节复制到当前流。

count 类型:System..::.Int32要写入当前流的字节数。

 

ReadStream

Peek 方法在读取下一行之前先检验该行

ReadLine 逐行读取

SR.BaseStream.Position:用来初始化流的起始位置

sr.BaseStream.Position =90;与sr.Read(,,)连用可以,读取流中的制定开始位置开始到指定位置结束,存入到数组的指定位置。

 

使用BinaryWriter与BinaryReader

 

使用.NET注册表类读写注册表信息

RegistryKey:实例表示一个注册表项。其方法用于浏览子键,创建新建,读取修改键中的值。常用属性包括:

Name:键的名称

SubKeyCount 键的子健个数

ValueCount:键包含的值得个数

常用方法:

Close()关闭键

CreateSubKey()创建给定名称的子键。(如果子键存在,就打开它)

DeleteSubKey()删除指定的子键

DeleteSubKeyTree()递归删除子键及其所有的子键

DeleteValue():从键中删除一个指定的值

GetAcessControl():返回自己顶注册表键的访问控制表

GetSubKeyNames():返回包含所有子键名称的字符串数据数组

GetValue():返回指定的值

GetValueKind():返回指定的值,检索其注册表数据类型

GetValueNames():返回一个包含所有键值名称的字符串数组

OpenSubKey():返回表示给定子键的RegistryKey实例引用

SetAcessControl():吧访问控制表(ACL)应用于指定的注册表键

SetValue():设置指定的值

posted on 2010-05-06 09:20  BLoodMaster  阅读(424)  评论(0编辑  收藏  举报