C# 文件操作
在.NET FrameWork中进行的所有输入输出都要使用到流,流是抽象串行化设备,可以以线性方式存储数据,并可以以同样方式访问:一次访问一个字节。
此设备可以是磁盘文件,打印机,内存位置和任何其他支持以线性方式读写的对象。
当向某些外部目标写数据时,就要用到输出流,这可以是物理磁盘文件,网络位置,打印机或者其他程序。
常用的类:
File----实用类,提供许多静态方法,用于移动、删除、和复制文件。
Dictionary ----实用类,提供许多静态方法,用于移动、删除、和复制目录。
Path ----实用类,用于处理路径名称。
FileInfo ----表示磁盘上的物理文件,具有可以处理此文件的方法,要完成对文件的读写工作,就必须创建Stream对象。
DictionaryInfo ----表示磁盘上的物理目录,具有可以处理此目录的方法。
FileStream ----- 表示可以被写或者被读,或二者都可以的文件,此文件可以异步读和写。
StreamReader ------从流中读取字符数据,并可以通过使用FileStream被创建为基类。
StreamWriter ------向流写字符数据,可以通过使用FileStream被创建为基类。
FileSystemWatcher -----用于监控文件和目录,并在这些位置发生变化时,给出应用程序可以捕获的事件。
- File和Dictionary类
作为实用类,File和Dictionary类都提供了许多方法,用于处理文件系统以及其中的文件和目录。这些是静态方法,涉及移动文件、查询和更新属性并创建FileStream对象。
File类一些常用的静态方法:
Copy()-----将文件复制到规定的位置
Create() -----在规定的位置创建文件
Delete() ----删除文件
Open() -----在规定的路径上返回FileStream对象
Move() ----将规定的文件移动到新位置,可以在新位置给文件规定不同的名字
Directory类的一些常用的静态方法
CreateDirectory() -----创建具有规定路径的目录
Delete() -----删除规定的目录以及其中的所有文件
GetDirectories() -----返回当前目录之前的目录的Directory对象的数组
GetFiles() -----返回在当前目录中的File对象的数组
Move() ----- 将规定的目录移动到新位置,可以在新位置为文件夹规定一个新名称
- FileInfo 类
FileInfo类不像File类,他没有静态方法,仅可用于实例化对象。FileInfo对象表示在磁盘或网络位置的文件,注意它不是流,为了读写文件,必须创建Stream对象。
Fileinfo类提供了下面关于基础性的文件的属性,这些属性可以用来更新文件。
Attributes---- 获取或设置当前文件的属性
CreationTime ---- 获取当前文件的创建日期和时间
DirectoryName ---- 获取文件目录的路径
Exists ---- 判断是否存在文件
FullName ---- 检索文件完整路径
Length ---- 获取文件的容量
Name ---- 仅仅返回文件的名称,而不是完整的文件位置路径
挡在.NET代码中规定路径名时,可以使用绝对路径名,也可以使用相对路径名。
绝对路径名显示的规定文件或目录来自于哪一个已知的位置。
相对路径相对于应用程序在文件系统上运行的位置。为了上移目录,使用..字符。
- FileStream对象
FileStream对象表示磁盘或者网络路径上指向文件的流。当类提供向文件的读写字节的方法时,经常使用StreamReader或StreamWriter执行这些功能。这是因为FileStream类操作字节或字节数组,而Stream类操作字符数据。字符数据易于使用,但是有些操作,比如随机文件访问,就必须由FileStream对象执行。
FileStream对象的构造函数
FileStream aFile = new FileStream("Log.txt",FileMode.OpenOrCreate);
FileMode枚举具有集中成员:
Append---- 如果文件存在,就打开文件,将文件的位置移动到文件的末尾,并创建一个新文件。FileMode.Append仅可以与枚举FileAccess.Write联合使用
Create---- 创建新文件,如果存在这样的文件,就破坏它
CreateNew---- 创建新文件,如果存在这样的文件,则抛出异常
Open---- 打开文件,不存在指定文件,则抛出异常
OpenOrCreate---- 如果文件存在,则打开文件,否则创建新文件,如果文件已存在,保存文件中数据
Truncate---- 打开现有文件,清除其内容,然后我们可以向文件写入全新的数据,但是保留文件的初始创建日期,文件不存在,抛出异常
访问级别
前面构造函数默认以只读模式打开文件,需要一个附加参数规定不同的访问级别,此参数是FileAccess参数
FileStream aFile = new FileStream("Log.txt",fileMode.OpenOrCreate,FileAccess.Write)
FileAccess枚举有三种类型:Read,Write,ReadWrite,此属性的作用是:基于用户的身份验证级别改变用户对文件的访问
读取文件位置用seek:public long Seek(long offset,SeekOrigin origin)
Long offset是规定文件指针以字节为单位的移动距离;SeekOrigin origin是规定开始计算的起始位置,此枚举包含3个值:Begin,Current和End
例如:aFile.Seek(8,SeekOrigin.Begin) 文件指针从文件的第一个字节起,移动到文件的第8个字节
aFile.Seek(2,SeekOrigin.Current)当前位置开始,再移动2个字节
aFile.Seek(-5,SeekOrigin.End)文件末端位置开始,倒数5个字节
读取数据
使用FileStream类读取数据不像StreamReader和StreamWriter类读取数据那么容易,这是因为FileStream类只能处理原始字节(raw byey),这使得FileStream类可以用于任何数据文件,而不仅仅是文本文件,通过读写字节数据就可以读取类型声音和图像的文件。这种灵活性的代价是不能使用它直接读入字符串,而是用StreamReader和StreamWriter类却可以这样处理。但是有几种转换类可以和容易的将字节数组转换为字符数组,或者进行相反的操作
Read() 方法是从FileStream对象所指向文件访问数据的主要手段:
Public int Read(byte[] array,int offset,int count)第一个参数是被传输进来的字节数组,用以接受FileStream对象中的数据。第二个参数是字节数组中开始写入数据的位置,它通常是0,表示从数组的开端文件中向数组写数据,最后一个参数规定从文件中读出多少字节
写入数据
写入数据的流程是先获取字节数组,再把字节数据转换成字符数组,然后把字符数组用Write()方法写入到文件中,当然在写入的过程中,可以确定在文件的什么位置写入,写多少字符等等。
浙公网安备 33010602011771号