本章重点介绍windows应用程序对文件读写所涉及的System.IO命名空间和File、FileInfo、FileStream、BinaryReader、BinaryWriter、BufferedStream等类,以及常用的方法、参数、属性、事件、枚举等。
u
本章的学习目标:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
n
了解System.IO 命名空间
n
掌握读写文本文件的方法
n
掌握向文件读写二进制数据的方法
n
掌握读写内存流的方法
3-1 System.IO 命名空间
u
本节学习目标:
n
了解
System.IO
类和引用方式
n
了解
File
类的常用方法
n
了解
Fileinfo
类的常用方法和主要属性
n
学习实现文件的复制方法
n
学习如何获取文件基本信息方法
n
了解文件夹类
Directory
的常用方法
n
学习获取文件的基本信息方法
n
学习简易文本编辑器的开发
以字节形式向磁盘写数据通常称为字节流(比特流)。存储在磁盘上的字节集合称为文件。在
windows
应用程序中,经常会读取文件中的数据,也会把处理后的数据存放到文件中,这就需要对外存上的文件进行输入
/
输出(
I/O
)处理。例如:一名财务人员将单位的工资报表进行保存,应用程序就会将数据以
.xls
文件形式保存到硬盘上。而另一位在家休假的员工想浏览旅游期间拍摄的照片,应用程序就会读取存放在硬盘上的
.bmp
文件。第三位员工要保留与好友的聊天记录,应用程序就会将会话文本以
.txt
文件形式保存到硬盘上。如图
3
-
1
所示:
图
3-1
文件应用举例
图
<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />3-1-1 System.IO类介绍
基于
.NET2.0
环境下的软件系统开发,已经把对文件的读写操作从底层转移到对类库的使用。类库结构中有个
System.IO
命名空间,里面包含允许读写文件和数据流的类型以及提供基本文件和目录支持的类型。列举一些常用的类,如表
3
-
1
所示:
表
3-1 System
.IO
命名空间常用的类
类
|
说明
|
File
|
提供用于创建、复制、删除、移动和打开文件的静态方法,并协助创建 FileStream 对象。
|
FileInfo
|
提供创建、复制、删除、移动和打开文件的实例方法,并且帮助创建 FileStream 对象。无法继承此类。
|
FileStream
|
公开以文件为主的 Stream,既支持同步读写操作,也支持异步读写操作。
|
BinaryReader
|
用特定的编码将基元数据类型读作二进制值。
|
BinaryWriter
|
以二进制形式将基元类型写入流,并支持用特定的编码写入字符串。
|
BufferedStream
|
给另一流上的读写操作添加一个缓冲层。无法继承此类。
|
Directory
|
公开用于创建、移动和枚举通过目录和子目录的静态方法。无法继承此类。
|
DirectoryInfo
|
公开用于创建、移动和枚举目录和子目录的实例方法。无法继承此类。
|
Path
|
对包含文件或目录路径信息的 String 实例执行操作。这些操作是以跨平台的方式执行的。
|
StreamReader
|
实现一个 TextReader,使其以一种特定的编码从字节流中读取字符。
|
StreamWriter
|
实现一个 TextWriter,使其以一种特定的编码向流中写入字符。
|
FileSysWatcher
|
侦听文件系统更改通知,并在目录或目录中的文件发生更改时引发事件。
|
这些类的结构如图
3
-
2
所示:
图
3-2 System
.IO
命名空间的类结构图
还有几个常作为参数的枚举,如表3-2所示:
表
3-2 System
.IO
命名空间常用的枚举
枚举
|
说明
|
FileMode
|
指定操作系统打开文件的方式。
|
FileShare
|
包含用于控制其他 FileStream 对象对同一文件可以具有的访问类型的常数。
|
FileAccess
|
定义用于控制对文件的读访问、写访问或读/写访问的常数。
|
小知识:
System.IO
命名空间的引用
在第一章提到了Using语句的使用,这里仍然建议使用Using来引用System.IO命名空间。在代码页的头部引用了System.IO命名空间
using
System.IO;
在代码中就可以随意使用其所包含的类及枚举了,例如:File.Creat()。否则,需要在代码处加上System.IO前缀,例如:System.IO. File.Creat()。
|
通过MSDN查看System.IO命名空间
请打开MSDN,选中索引标签,在查找文本框内填入“System.IO”,在列表框中选中“System.IO命名空间”,右侧主页面会显示类、枚举、委托、结构列表。点击类“File”,就会看到关于类“File”的介绍,还包括语法、备注、示例、继承层次结构、线程安全、平台、版本信息、公共方法、参见。通过这些帮助文档,尤其是示例,很容易掌握类“File”的使用。
|
3-1-2 File类的常用方法
利用
MSDN
就可以掌握类
File
的使用,类
File
提供用于创建、复制、删除、移动和打开文件的静态方法,并协助创建
FileStream
对象。类
File
有几个常用方法,如表
3
-
3
所示:
表
3-3
类
File
的常用方法
方法
|
说明
|
Move
|
将指定文件移到新位置,并提供指定新文件名的选项。
|
Delete
|
删除指定的文件。如果指定的文件不存在,则不引发异常。
|
Copy
|
已重载。 将现有文件复制到新文件。
|
CreateText
|
创建或打开一个文件用于写入 UTF-8 编码的文本。
|
OpenText
|
打开现有 UTF-8 编码文本文件以进行读取。
|
Open
|
已重载。 打开指定路径上的 FileStream。
|
1.<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /> 案例学习:了解File类的一些主要方法
下面的示例演示了
File
类的一些主要方法。
using
System;
using
System.IO;
class
Test
{
public static void Main()
{
string path = @"c:\temp\MyTest.txt";
if (!File.Exists(path))
{
// 创建文件以便写入内容。
using (StreamWriter sw = File.CreateText(path))
{
sw.WriteLine("Hello");
sw.WriteLine("And");
sw.WriteLine("Welcome");
}
}
// 打开文件从里面读数据。
using (StreamReader sr = File.OpenText(path))
{
string s = "";
while ((s = sr.ReadLine()) != null)
{
Console.WriteLine(s);
}
}
try
{
string path2 = path + "temp";
// 确认将要拷贝成的文件是否已经有同名的文件存在。
File.Delete(path2);
// 拷贝文件。
File.Copy(path, path2);
Console.WriteLine("{0} was copied to {1}.", path, path2);
// 删除新生成的文件。
File.Delete(path2);
Console.WriteLine("{0} was successfully deleted.", path2);
}
catch (Exception e)
{
Console.WriteLine("The process failed: {0}", e.ToString());
}
}
}
|
3-1-3 Fileinfo类的常用方法
类
FileInfo
提供创建、复制、删除、移动和打开文件的实例方法,并且帮助创建
FileStream
对象。无法继承此类。类
FileInfo
有几个常用方法,如表
3
-
4
所示:
表
3-4
类
FileInfo
的常用属性
属性
|
说明
|
Attributes
|
获取或设置当前 FileSystemInfo 的 FileAttributes。(从 FileSystemInfo 继承。)
|
CreationTime
|
获取或设置当前 FileSystemInfo 对象的创建时间。(从 FileSystemInfo 继承。)
|
Directory
|
获取父目录的实例。
|
DirectoryName
|
获取表示目录的完整路径的字符串。
|
Exists
|
已重写。获取指示文件是否存在的值。
|
Extension
|
获取表示文件扩展名部分的字符串。(从 FileSystemInfo 继承。)
|
转载于:https://blog.51cto.com/qianshao/210935