一、文件系統概述
计算机系统的重要作用之一是能快速处理大量信息,因此数据的组织和存取成为一个极为重要的内容。文件是信息的一种组织形式,而文件系统的的目标就是提高存储器的利用率,接受用户的委托实施对文件的操作。
文件系统是操作系统的一个重要组成部分。文件系统所要解决的问题包括:管理存储设置,决定文件的存放位置和方式,提供共享能力,保证文件安全性,提供友好的用户接口。通过文件系统,用户和应用程序能方便地进行数据存储,而不必关心底层存储设备的实现。
Windows支持多种文件系统,如FAT,FAT32,NTFS等。这些文件系统在操作系统内部有不同的实现方式,然而它们提供给用户的接口是一致的。如果应用程序不涉及到操作系统的具体特性,那么只要按照标准式来编写代码,生成的应用程序就可以运行在各个文件系统上,甚至还可以不经改动移植到其他操作系统(比如Unix和Linux)上.NET框架中的IO处理部分就封装了文件系统的实现细节,提供给开发人员一个标准化的接口。
Windows操作系统对文件系统采用多级目录结构,并且提供了一组命令用于文件和目录管理。可以使用.NET提供的标准方法进行目录管理、文件控制和文件存取等工作,程序代友编译执行时,.NET框架会自动调用相关的系统命令。
C#将文件视为一个字节序列,以流的方式对文件进行操作。流是字节序列的制作概念,文件、输入/输出设计、内部时行程序管道以及TCP/IP套接字等都可以视为一个流。.NET对流的概念进行了抽象,为这些不同类型的输入和输出提供了统一的视图,使程序员不必去了解操作系统和基础设备的具体细节。
二、目录和文件
1. 相关枚举类型
a) FileAccess,该枚举类型表示文件的访问权限,可以为以下值。
i. Read---对文件拥有读权限
ii. ReadWrite---对文件拥有的读写权限
iii. Write---对文件拥有写权限
b) FileAttributes,该枚举类型表示文件的类型
i. Archive---存档文件
ii. Compressed---压缩文件
iii. Device---设备文件
iv. Directory---目录
v. Encrypted---加密文件
vi. Hidden---隐藏文件
vii. Normal---普通文件
viii. NOtContentIndexd---无索引文件
ix. Offline---脱机文件
x. ReadOnly---只读文件
xi. ReparsePoint---重分析文件
xii. SparseFile---稀疏文件
xiii. System---系统文件
xiv. Temporary---临时文件
枚举值可以按位进行组合使用,比如FileAttributes.System|FileAttributes.ReadOnly表示系统只读文件。当然,一些相互排斥的类型是不能进行组合的,比如一个文件不能既是普通文件,又是隐藏文件。
c) FileMode,该枚举类型表示文件的打开方式,可以为以下值:
i. Append---以追加的方式打开文件,如果文件存在则移动到文件末尾,否则创建一个新文件。
ii. Create---创建并打开一个文件,如果文件已经存在则覆盖旧文件。
iii. Open---打开现有文件,如果文件不存在发生异常。
iv. OpenOrCreate---打开或新建一个文件,如果文件存在则打开它,否则创建并打开一个新文件。
v. Truncate---打开现有文件,并清空文件内容。
d) FileShare,该枚举类型表示文件共享方式,可以为以下值。
i. None---禁止任何形式的共享。
ii. Read---读共享,打开文件后允许其它进程对文件进行读写操作。
iii. ReadWrite---读写共享,打开文件后允许其它进程对文件进行读和写操作。
iv. Write---写共享,打开文件后允许其它进程对文件进行写操作。
e) SeekOrigin,该枚举类型表示文件的偏移以什么为准,可以为以下值:
i. Begin---从文件起始位置计。
ii. Current---从文件流的当前位置计。
iii. End---从文件流的末尾位置计。
f) NotifyFilters,该枚举类型用于指定对文件或目录哪些属性的修改进行监视,可以为以下值:
i. Attributes---对属性的变化进行监视。
ii. CreationTime---对创建时间的变化进行监视。
iii. DirectoryName---对目录名称的变化进行监视。
iv. FileName---对文件名称的变化进行监视。
v. LastAccess---对最后一次访问时间的变化进行监视。
vi. LastWrite---对最后一次时间的变化进行监视。
vii. Security---对安全设置的变化进行监视。
viii. Size---对大小的变化进行监视。
2. 目录
使用Directory类提供的目录管理功能,不仅可以创建、移动和删除目录,还可以获取和设置目录的相关信息。
Directory提供的静态方法有:
Ø Public static DirectoryInfo CreateDirectory(string)---给定路径名,创建目录,并返回目录信息。
Ø Public static void Delete(string)---给定路径名,删除目录。
Ø Public static void bool Exists(string)----给定路径名,判断目录是否存在。
Ø Public static DateTime GetCreationTime(string)----给定路径名,获取目录创建的日期和时间。
Ø Public static string GetCurrentDirectory()---获取应用程序的当前工作目录。
Ø Public static string[] GetDirectory(string)---给定路径名,获取目录中的子目录列表。
Ø Public static string GetDirectoryRoot(string)---给定路径名,获取目录的卷信息或要信息。
Ø Public static string[] GetFile(string)---给定路径名,获取目录中的文件列表。
Ø Public static string[] GetFileSystemEntries(string)---给定路径名,获取目录中的子目录和文件列表。
Ø Public static DateTime GetLastAccessTime(string)---给定路径名,获取文件最近一次访问的日期和时间。
Ø Public static DateTime GetlastWriteTime(string)---给定路径名,获得目录最近一次修改的日期和时间。
Ø Public static string[] GetLogicalDrivers()---获得计算机上的逻辑驱动器列表。
Ø Public static DirectoryInfo GetParent(string)---给定路径名,获取目录上层目录的信息。
Ø Public static void Move(string,string)---给定源路径名和目标路径名,移动目录。
Ø Public static void SetCreationTime(string,DateTime)---给定路径名,设置目录创建的日期和时间。
Ø Public static void SetCreationDirectory(string)---给定路径名,将目录设置为应用程序的当前工作目录。
Ø Public static void SetLastAccessTime(string,DateTime)---给定路径名,设置目录最近一次被访问的日期和时间。
Ø Public static void SetLastWriteTime(string,DateTime)---给定路径名,设置目录最近一次被修改的日期和时间。
3. 文件
a) 文件基本操作
Ø Public static FileStream Create(string)---给定文件路径名,创建文件,并返回一个FileStream流对象。
Ø Public static StreamWriter CreateText(string)---给定文件路径名,以文本的方式创建文件,并返回一个StreamWriter流对象。
Ø Public static void Copy(string,string)---给定源路径名和目录路径名,考贝文件。
Ø Public static void Move(string,string)---给定源路径名和目录路径名,移支文件。
Ø Public static void Delete(string)---给定源路径名和目录路径名,删除文件。
Ø Public static void Exists(string)---给定源路径名和目录路径名,判断文件是否存在。
b)获取和设置文件信息
Ø Public static FileAttributes GetAttributes(string)------给定源路径名,获取文件的属性集。
Ø Public static DateTime GetCreationTime(string)---给定文件路径名,获取文件创建宾日期和时间。
Ø Public static DateTime GetLastAccessTime(string)---给定文件路径名,获得文件最近一次被访问的日期和时间。
Ø Public static DateTime GetLastWriteTime(string)---给定文件路径名,获得文件最近一次被修改的日期和时间。
Ø Public static void SetAttributes(string,FileAttributes)---给定文件路径名,设置文件属性集。
Ø Public static void SetCreationTime(string,DateTime)---给定文件路径名,设置文件创建的日期和时间。
Ø Public static void SetLastAccessTime(string,DateTime)----给定文件路径名,设置文件最近一次被访问的日期和时间。
Ø Public static void SetLastWriteTime(string,DateTime)---给定文件路径名,设置文件最后一次被修改的日期和时间。
c)打开文件,并将文件与流对象相关联
Ø Public static FileStream Open(string,FileMode)---给定文件路径名,按指定的方式打开文件,并返回一个FileStream流对象。
Ø Public static FileStream OpenRead(string)---给定文件路径名,以只读方式打开文件,并返回一个FileStream流对象。
Ø Public static FileStream OpenWrite(string)---给定文件路径名,打开文件进行读写操作,并返回一个FileStream流对象。
Ø Public static StreamReader OpenText(string)---给定文件路径名,以文本方式打开文件并返回一个FileStream流对象。
Ø Public static StreamWriter AppendText(string)---给定文件路径名,以文本方式打开文件进行写操作,并返回一个StreamWriter流对象。