大多数 Web 应用程序依赖数据库来存储信息。在多用户场景中,数据库是无与伦比的。但还是会有不可避免的遇到访问存储在其他地方(如文件系统)的数据的问题。常见的示例有:读取其他程序产生的信息、为测试而编写的临时日志等。
使用文件系统
最基本的文件访问包括获取现有文件和目录的信息,以及执行典型的文件系统操作,如复制文件和创建目录。这些任务并没有设计真正的打开或写文件。
.NET 提供了几个基类(System.IO 命名空间中)用于获取文件系统信息:
- Directory 和 File :这两个类提供一组静态方法,可以通过它们获取任意服务器上可见的文件和目录的信息。
- DirectoryInfo、FileInfo、DriveInfo :这些类用相似的实例方法获取同样的信息。
这两组类提供相似的方法和属性。一般而言,Directory 和 File 类更适合处理一次性任务。DirectoryInfo 和 FileInfo 更适合获取若干信息,这样不必再每次调用方法时都提供文件或目录的信息。同时,它们还更快一些,因为 DirectoryInfo 和 FileInfo 类只执行一次安全检查(创建对象的实例时),而 Directory 和 File 在每次调用方法时都需要执行安全检查。
Directory 类和 File 类
它们提供了很多有用的方法,每个方法都接受相同的参数:用于识别执行操作的文件和目录的完全限定路径名。
Directory 方法:
| CreateDirectory() | 创建一个或一组目录(创建不存在的目录中的子目录时)。 |
| Delete() | 删除对应的空目录。如果要删除该目录及其所有内容(子目录和文件),第二个可选参数设为 True |
| Exists() | 返回 bool 值表示指定的目录是否存在 |
| GetCreationTime() GetLastAccessTime() GetLastWriteTime() | 返回一个 DateTime 对象,代表创建、访问、写入目录的时间。每个Get方法都有一个对应的Set方法,这里没有列出。 |
| GetDirectories() GetFiles() | 返回一个字符串数组,数组元素代表指定目录中的子目录或文件。第二个可选参数支持搜索表达式,如 (ASP*.*) |
| GetLogicaDrives() | 返回一个字符串数组,数组元素代表当前计算机上定义的一个驱动器,如 c:\ |
| GetParent() | 返回指定目录的父目录 |
| GetCurrentDirectory() SetCurrentDirectory() | 设置和获取当前目录 |
| Move() | 接收两个参数:源路径和目标路径。目录及其内容可以移动到任意路径,但必须在同一个磁盘 |
| GetAccessControl() SetAccessControl() | 返回或设置一个 System.Secutiry.AccessControl.DirectorySecurity 对象。可以使用这个对象检查 Windows 访问控制表(ACL),它们应用于这个目录且可以通过编程来修改。 |
File 方法:
| Copy() | 接收两个参数:源文件和目标文件的完整文件名。如果允许覆写,第三个可选参数设为 true |
| Delete() | 删除指定的文件,如果找不到文件也不会抛出异常。 |
| Exists() | 文件是否存在 |
| GetAttributes() SetAttributes() | 获取或设置一个可以包含 FillAttribute 枚举值的任意组合的枚举值 |
| GetCreationTime() GetLastAccessTime() GetLastWriteTime() | 返回一个 DateTime 对象,代表创建、访问、写入文件的时间。每个Get方法都有一个对应的Set方法,这里没有列出。 |
| Move() | 接收两个参数:源文件和目标文件的完整文件名。可以跨磁盘移动文件甚至同时重命名文件 |
| Create() CreateText() | 创建指定的文件并返回一个可用于写的 FileStream 对象。CreateText() 执行同样的任务但是返回一个封装了流的 StreamWriter 对象。 |
| Open() OpenText() OpenRead() OpenWrite() | 打开一个文件(假设其存在)。OpenText() 和 OpenRead() 以只读方式打开文件,返回一个 FileStream 或 StreamReader 。OpenWrite() 以只写方式打开文件,返回 FileStream |
| ReadAllText() ReadAllLines() ReadAllBytes() | 读取整个文件。分别以单一字符串、字符串数组、字节数组的形式返回内容。仅在小文件才使用这些方法,对于大型文件,使用流每次读取一块以节省内存使用。 |
| WriteAllText() WriteAllLines() WriteAllBytes() | 将单一字符串、字符串数组、字节数组一次写入完整文件内容。可以覆盖已存在的文件。 |
| GetAccessControl() SetAccessControl() | 返回或设置一个 System.Secutiry.AccessControl.FileSecurity 对象。可以使用这个对象检查 Windows 访问控制表(ACL),它们应用于这个目录且可以通过编程来修改。 |
提示:File 类缺乏的唯一功能是获取给定文件的大小(可由 FileInfo 类提供)。
;
ListBox1.DataSource = Directory.GetFiles(directoryName);
ListBox1.DataBind();