来源:http://blog.sina.com.cn/s/blog_5d2e69770101e4gm.html
操作文件专用流System.IO命名空间下的Filestream;
字符/字节:字符是表现出来的,字节的计算机内存的。如:“我”这个字直接表现为1个字符,如字符串string就是这个意思;但是在计算机内存中则是2个字节,如字节数组byte[],只有英文和数字才是一个字节。
在读写文件的过程中,Filestream只可以进行以字节为单位原始数据流进行读写操作;
一. FileStream详解
基本格式:FileStream(string filename, FileMode mode, FileAccess access); 参数的意思(文件名,文件模式,操作模式)
例:FileStreamfs=new FileStream(“c:\tab.txt”,FileMode.OpenOrCreate,FileAccess.Read);
文件名:“c:\tab.txt”;
文件模式:FileMode类的属性
FileMode.Create 创建文件,之前存在同名的文件将被毁掉
FileMode.CreateNew 创建新文件,这个文件之前不存在
FileMode.Open 打开已经存在的文件
FileMode.OpenOrCreate 打开文件如果存在,否则创建新文件
FileMode.Truncate 打开以存在的文件,将它的内容清除掉
FileMode.Append 以追加的形式将数据写入到文件的最后
操作模式:FileAccess类的属性
FileAccess.Write 只写
FileAccess.Read 只读
FileAccess.ReadWrite 读写
例:
1. (FileStream fs1 = File.Open("c:\test.txt", FileMode.Open)); --打开
FileMode.Open 直接用FileStream类打开文件c:\test.txt",
2. (FileStream fs2 = File.Open("c:\test.txt", FileMode.Append, FileAccess.Write)); --追加写入
FileMode.Append,以追加的方式打开文件"c:\test.txt",将某些内容写到"c:\test.txt"里.
3.(FileStream fs3 =File.Open("c:\test.txt", FileMode.Truncate, FileAccess.ReadWrite, FileShare.Read)). --清空再写入
FileMode.Truncate的意思是将文件打开清空里面的内容后再对文件进行操作..
4. FileStream MyFileStream1 = new FileStream(@"c:Testing.txt", FileMode.Create); --创建可读写文件
这个方法的意思是创建一个可以读写的文件,并且可以允许其他人读取文件的内容.
流/Stream的方法和属性
1.方法
void Close() 关闭流
void Flush() 清理流中的内容
int ReadByte() 返回一个整数表示输入的字节数,如果没有数据返回-1
int Read(byte[ ] buf,int offset, int numBytes) 将numBytes个字节读入到byte[ ]的以offset为,起始位置,返回读入成功的字节数
2. 属性
Long Seek(long offset,SeekOrigin origin) 将当前位置定位到以origin为初始位置以后的offset处.
void WriteByte(byte b) 将单个字节写入到一个输出流.
void Write(byte[ ] buf,int offset, int numBytes) 写入byte[ ] buf中从offset开始的numBytes个字节.
bool CanRead 是否可读
bool CanSeek 是否支持寻址
bool CanWrite 是否可以写入数据
long Length 流的长度
long Position 流的当前位置.
//----------------------------------------------------------------------------------------------------------------------------------//
StreamReader/ StreamWriter可以进行以字符为单位的数据读写操作
负责向文件中读数据
用StreamReader的构造函数:
1. StreamReader sr=new StreamReader (Stream); ---从文件流中读取:Stream可以是Filestream;
FileStream filest = new FileStream(@"c:abc.txt", FileMode.Open, FileAccess.ReadWrite);
StreamReader sr = new StreamReader(filest); //或者指定编码StreamReader sr = new StreamReader(filest,Encoding.GetEncoding("gb2312"));
2. StreamReader sr=new StreamReader (String); --从文件地址中读取:String为指定的文件名初始化 StreamReader 类的新实例。
StreamReader another = new StreamReader(@"c:abc.txt");
完整操作例子:
FileStream filest = new FileStream(@"c:abc.txt", FileMode.Open, FileAccess.ReadWrite);
StreamReader sr = new StreamReader(filest);
string strLine = sr.ReadLine();//读取文件中的一行
while(strLine!=null)//判断是否为空,表示到文件最后一行了
{
strLine = sr.ReadLine(); --一行一行读,可控制
//string x =sr.ReadToEnd() --一次性读取完成
}
sr.Close();//关闭流
filest.Close();
负责向文件中写数据
StreamWriter
1. StreamWriter sr=new StreamWriter (Stream); Stream可以是Filestream;
FileStream filest = new FileStream(@"c:abc.txt", FileMode.Open, FileAccess.ReadWrite);
StreamWriter sw = new StreamWriter (filest); //或者指定编码StreamReader sr = new StreamReader(filest,Encoding.GetEncoding("gb2312"));
2. StreamWriter sr=new StreamWriter (String); String为指定的文件名初始化StreamWriter 类的新实例。
StreamWriter another = new StreamWriter (@"c:abc.txt");
完整例子.
FileStream filewriter = new FileStream(@"C:abc.txt", FileMode.Append, FileAccess.Write); --以追加的方式打开文件,并进行写入操作.
StreamWriter sw = new StreamWriter(filewriter); 构造函数;
for (char mychar = 'a'; mychar <= 'z'; mychar++)
{
sw.Write(mychar);//将从a—z26个小写字母写入文件中,就是直接写入字符串
}
sw.Close();
filewriter.Close();
另一种列子:
using是为了在使用完成后自动释放不使用using 的实例:
1. FileStream fs = File.Open("文件名.扩展名", FileMode.Create, FileAccess.Write);
StreamWriter sw = new StreamWriter(fs, Encoding.GetEncoding("gb2312"));
sw.WriteLine("要写入的一行字符串".Replace("
","
"));
sw.Close();
fs.Close();
2. FileStream fs = File.Open("文件名.扩展名", FileMode.Open, FileAccess.Read);
StreamReader sr=new StreamReader(fs, Encoding.GetEncoding("gb2312"));
string line=sr.ReandLine();
sr.Close();
fs.Close();
//----------------------------------------------------------------------------------------------------------------------------------//
其他流
MemoryStream 内存流 和 NetworkStream 网络流
1. NetworkStream ns = new NetworkStream();
2. MemoryStream ms = new MemoryStream();
//----------------------------------------------------------------------------------------------------------------------------------//