FileMode Enum
指定操作系统打开文件的方式。
字段 | 说明 |
---|---|
Append | 打开文件,如果不存在则创建一个新文件。 |
Create | 创建新文件,如果文件已存在,则被覆盖。 |
CreateNew | 创建新文件,如果文件已存在,引发IOException异常。 |
Open | 打开文件,如果不存在,引发FileNotFoundException异常。 |
OpenOrCreate | 打开文件(已存在),如果不存在则创建一个新文件。 |
Truncate | 打开文件并清空内容,如果不存在,引发异常。 |
FileAccess Enum
定义文件的读取、写入或读/写访问权限的常量。
字段 | 说明 |
---|---|
Read | 对文件读取访问。可从文件读取数据。 |
ReadWrite | 对文件的读写访问权限。可以从文件读取数据和将数据写入文件 |
Write | 文件的写访问。可将数据写入文件 |
FileShare Enum
包含用于控制其他 FileStream 对象对同一文件可以具有的访问类型的常数。
字段 | 说明 |
---|---|
Delete | 允许随后删除文件。 |
Inheritable | 使文件句柄可由子进程继承。 Win32 不直接支持此功能 |
None | 谢绝共享当前文件。 文件关闭前,打开该文件的任何请求(由此进程或另一进程发出的请求)都将失败。 |
Read | 允许随后打开文件读取。 如果未指定此标志,则文件关闭前,任何打开该文件以进行读取的请求(由此进程或另一进程发出的请求)都将失败。 但是,即使指定了此标志,仍可能需要附加权限才能够访问该文件。 |
ReadWrite | 允许随后打开文件读取或写入。 如果未指定此标志,则文件关闭前,任何打开该文件以进行读取或写入的请求(由此进程或另一进程发出)都将失败。但是,即使指定了此标志,仍可能需要附加权限才能够访问该文件。 |
Write | 允许随后打开文件写入。 如果未指定此标志,则文件关闭前,任何打开该文件以进行写入的请求(由此进程或另一进过程发出的请求)都将失败。 但是,即使指定了此标志,仍可能需要附加权限才能够访问该文件。 |
FileStream
为文件提供 Stream,既支持同步读写操作,也支持异步读写操作。
//打开并读取文本
private void ReadTXT()
{
string txtUrl = AppDomain.CurrentDomain.BaseDirectory + "MyTest.txt";
using (FileStream fs = new FileStream(txtUrl, FileMode.Open))
{
int len = (int)fs.Length;//流长度(字节为单位)
byte[] buffer = new byte[len];
int n = fs.Read(buffer, 0, len);//从流中读取字节块并将该数据写入给定缓冲区中。
string str = Encoding.Default.GetString(buffer);
Console.WriteLine(str);
}
}
//打开并写入数据
private void WriteTXT()
{
string txtUrl = AppDomain.CurrentDomain.BaseDirectory + "MyTest.txt";
using (FileStream fs = new FileStream(txtUrl, FileMode.Open))
{
string str = "你好";
byte[] buffer = Encoding.Default.GetBytes(str);
fs.Write(buffer,0,buffer.Length);//从起始位置0位置,写入数据,原先0位置的数据会被替换掉
}
}
StreamReader
实现一个 TextReader,使其以一种特定的编码从字节流中读取字符。
//读取文本
private void ReadTXT_StreamReader()
{
string txtUrl = AppDomain.CurrentDomain.BaseDirectory + "MyTest.txt";
//using (StreamReader sr = new StreamReader(txtUrl))//不指定编码
using (StreamReader sr = new StreamReader(txtUrl,Encoding.UTF8))//指定编码
{
string str = "";
string line = sr.ReadLine();
while(line != null)
{
str += line;
line = sr.ReadLine();
}
Console.WriteLine(str);
}
}
StreamWriter
实现一个 TextWriter,使其以一种特定的编码向流中写入字符。
//写入数据
private void WriteTXT_StreamWriter()
{
string txtUrl = AppDomain.CurrentDomain.BaseDirectory + "MyTest.txt";
//using (StreamWriter sw = new StreamWriter(txtUrl))//如果文件存在,则会清空原先内容
using (StreamWriter sw = new StreamWriter(txtUrl,true))//第二个参数,true 如果文件存在数据追加到该文件中
{
sw.WriteLine("Hello 你好吗?");//写入数据
}
}
FileStream 和 StreamReader 结合使用
//打开并读取文本
private void ReadTXT_FileStream_StreamReader()
{
string txtUrl = AppDomain.CurrentDomain.BaseDirectory + "MyTest.txt";
using (FileStream fs = new FileStream(txtUrl, FileMode.Open))
{
StreamReader sr = new StreamReader(fs);//要读取的流。
string strTxt = "";
string strLine = sr.ReadLine();
while (strLine != null)
{
strTxt += strLine;
strLine = sr.ReadLine();
}
sr.Close();//手动关闭
Console.WriteLine(strTxt);
}
}
FileStream 和 StreamWriter结合使用
//写入数据
private void WriteTXT_FileStream_StreamWriter()
{
string txtUrl = AppDomain.CurrentDomain.BaseDirectory + "MyTest.txt";
using (FileStream fs = new FileStream(txtUrl, FileMode.Open))//此方式结合StreamWriter 每次写入都是从起始位置,并且会顶替原先位置内容
//using (FileStream fs = new FileStream(txtUrl, FileMode.Append))//此方式结合StreamWriter 会从内容末尾追加新写入的内容
{
StreamWriter sw = new StreamWriter(fs,Encoding.UTF8);
sw.WriteLine("嘿嘿嘿");
sw.Close();
}
}
注解:
实现了IDisposable接口。使用完类型后,您应该直接或间接释放类型。若要直接释放类型,调用Dispose中的方法try/catch块。若要间接释放类型,请使用using语法。