- `FileStream` 类
- `FileMode`
- `FileAccess`
- `FileShare`
- `StreamReader` 类和`StreamWriter`类
- `StreamReader` 类
- `StreamWriter`类
- 关于`using`
FileStream
类
FileStream <object_name> = new FileStream( <file_name>,
<FileMode Enumerator>, <FileAccess Enumerator>, <FileShare Enumerator>);
例如,创建一个 FileStream
对象 F
来读取名为 sample.txt
的文件:
FileStream F = new FileStream("sample.txt", FileMode.Open, FileAccess.Read, FileShare.Read);
注意FileMode
和FileAccess
的匹配问题
FileMode
FileMode
枚举定义了各种打开文件的方法。FileMode
枚举的成员有:
Append
:打开一个已有的文件,并将光标放置在文件的末尾。如果文件不存在,则创建文件。
Create
:创建一个新的文件。如果文件已存在,则删除旧文件,然后创建新文件。
CreateNew
:指定操作系统应创建一个新的文件。如果文件已存在,则抛出异常。
Open
:打开一个已有的文件。如果文件不存在,则抛出异常。
OpenOrCreate
:指定操作系统应打开一个已有的文件。如果文件不存在,则用指定的名称创建一个新的文件打开。
Truncate
:打开一个已有的文件,文件一旦打开,就将被截断为零字节大小。然后我们可以向文件写入全新的数据,但是保留文件的初始创建日期。如果文件不存在,则抛出异常。
FileAccess
FileAccess
枚举的成员有:
Read
、ReadWrite
和 Write
。
FileShare
FileShare
枚举的成员有:
Inheritable
:允许文件句柄可由子进程继承。Win32
不直接支持此功能。
None
:谢绝共享当前文件。文件关闭前,打开该文件的任何请求(由此进程或另一进程发出的请求)都将失败。
Read
:允许随后打开文件读取。如果未指定此标志,则文件关闭前,任何打开该文件以进行读取的请求(由此进程或另一进程发出的请求)都将失败。但是,即使指定了此标志,仍可能需要附加权限才能够访问该文件。
ReadWrite
:允许随后打开文件读取或写入。如果未指定此标志,则文件关闭前,任何打开该文件以进行读取或写入的请求(由此进程或另一进程发出)都将失败。但是,即使指定了此标志,仍可能需要附加权限才能够访问该文件。
Write
:允许随后打开文件写入。如果未指定此标志,则文件关闭前,任何打开该文件以进行写入的请求(由此进程或另一进过程发出的请求)都将失败。但是,即使指定了此标志,仍可能需要附加权限才能够访问该文件。
Delete
:允许随后删除文件。
StreamReader
类和StreamWriter
类
StreamReader
类
在 C#
中提供了多种方法来读取字符流中的数据。以下是一些常用的 StreamReader
方法:
Read()
:从流中读取下一个字符,并将其作为整数值返回。如果到达了流的末尾,则返回 -1
。
ReadLine()
:从流中读取一行字符,并将其作为字符串返回。如果到达了流的末尾,则返回 null
。
ReadToEnd()
:从流的当前位置读取到末尾,并将所有字符作为字符串返回。
Peek()
:返回流中下一个可用的字符,但不将其从流中移除。这可以用于查看下一个字符而不实际读取它。
Close()
:关闭 StreamReader
对象和基础流,并释放与读取器关联的所有系统资源。
DiscardBufferedData()
:清除内部缓冲区。当内部缓冲区和流的位置不匹配时,可以调用此方法。
StreamWriter
类
是System.IO
命名空间中的一个用于写入文本到文件的类,它提供了多种方法来写入不同类型的数据到文件中,并且可以指定编码、是否追加等参数。StreamWriter
的一些常用方法包括:
Write()
:将一个字符串写入流。
WriteLine()
:将一个字符串写入流,并在其后添加一个换行符。
Flush()
:清理当前写入器的所有缓冲区,并使所有缓冲数据写入基础流。这可以确保在程序继续执行之前,所有待写入的数据都已经被写入到目标位置。
Close()
:关闭当前StreamWriter对象和基础流。关闭StreamWriter对象后,你将无法再向其中写入数据。
Dispose()
:使所有缓冲数据写入基础流,并释放StreamWriter使用的非托管资源。这个方法还可以根据需要释放受管理的资源。当StreamWriter对象超出其作用域或被显式地调用Dispose方法时,这个方法会被自动调用
关于using
通常建议将其放在 using
语句块中,以确保流在使用完毕后被正确关闭和释放资源,即使发生异常也是如此。
例子
class TODO {public static void Main(String[] args) {try {string path = @"C:\Users\to_bo\Desktop\1.txt";using (StreamWriter sw = new StreamWriter(path, true)) {sw.WriteLine("and YOU!");}using (StreamReader sr = new StreamReader(path)) {string line;while((line = sr.ReadLine()) != null) {Console.WriteLine(line);}}} catch (Exception e) {Console.WriteLine(e.Message);}}
}