文件流操作

来源: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("\n","\r\n"));
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();

//----------------------------------------------------------------------------------------------------------------------------------//

 

posted @ 2016-11-22 15:06  黑色鼠标  阅读(315)  评论(0编辑  收藏  举报