c#基础入门(5)——File、FileStream、StreamReader、StreamWriter
2016-07-29 00:05
666 查看
File
File的用法如下:public void OperateFile() { //example文件初始内容截图如图一 string filePath = @"e:\Study\test\example.txt"; if (File.Exists(filePath)) { //allText="蝈蝈first\r\n蝈蝈second\r\n蝈蝈third" string allText = File.ReadAllText(filePath,Encoding.Default); //allLines[0]="蝈蝈first" //allLines[1]="蝈蝈second" //allLines[2]="蝈蝈third" string[] allLines = File.ReadAllLines(filePath,Encoding.Default); byte[] allBytes = File.ReadAllBytes(filePath); //byte[]转成string, //str="蝈蝈first\r\n蝈蝈second\r\n蝈蝈third" string str = System.Text.Encoding.Default.GetString(allBytes); //string类型转成byte[], //byteArray={97,98,99,100,101,102}依次对应 //ASCII码表中a、b、c、d、e的十进制值 byte[] byteArray = System.Text.Encoding.Default.GetBytes("abcde"); //example.txt中的内容是:abcde File.WriteAllBytes(filePath, byteArray); //example.txt中的内容是: //"stringArray1\r\nstringArray2\r\nstringArray3", //\r\n以换行的形式出现 File.WriteAllLines(filePath, new string[] { "stringArray1", "stringArray2", "stringArray3" }); //example.txt中的内容是:writeAllTxt的内容\r\n第二行, //\r\n以换行的形式出现 File.WriteAllText(filePath, "writeAllTxt的内容\r\n第二行"); //AppendAllLines之后example文件内容截图如图二 File.AppendAllLines(filePath, new string[] { "appendFirst","appendSecond","appendThird"}); //AppendAllText之后example文件内容截图如图三 File.AppendAllText(filePath, "appendAllTextContent"); byte[] beforeAppendText = File.ReadAllBytes(filePath); //AppendText之后example文件内容截图如图四 StreamWriter writer = File.AppendText(filePath); writer.Write("streamWriterContent"); writer.Dispose(); byte[] afterAppendText = File.ReadAllBytes(filePath); } }
图一
图二
图三
图四
FileStream
FileStream对象表示在磁盘或网络路径上指向文件的流。这个类提供了在文件中读写字节的方法,但经常使用StreamReader或StreamWriter执行这些功能。这是因为FileStream类操作的是字节和字节数组(不仅可以读写txt还能读写.mp3……),而Stream类操作的是字符数据(只能是文字)。文件的访问方式(FileAccess),包括三个枚举:
FileAccess.Read(对文件读访问)
FileAccess.Write(对文件进行写操作)
FileAccess.ReadWrite(对文件读或写操作)
在FileStream构造函数不使用FileAccess枚举参数的版本中,使用默认值FileAccess. ReadWrite,即有文件的读写权限。
注意:
文件流使用结束后,一定要Close或Dispose,using(){}方法在使用完文件流对象后会自动将其释放
public void OperateFileStream() { string filePath=@"E:\Study\test\example.txt"; byte[] byteArray= new byte[1024]; using (FileStream sReader = new FileStream(filePath, FileMode.Open)) { //length=32,汉字占2个字节、英文占1个字节2*6+5+6+5+2*2=32 int length = sReader.Read(byteArray, 0, byteArray.Length); //result="蝈蝈first\r\n蝈蝈second\r\n蝈蝈third" string result = System.Text.Encoding.Default.GetString(byteArray, 0, length); //result="蝈蝈first\r\n蝈蝈second\r\n蝈蝈third\0\0\0\0\0......" //"\0"指的是空字符 //byteArray的长度是1024数据不够1024byte时用"\0"填充 result = System.Text.Encoding.Default.GetString(byteArray); } using (FileStream sReader = new FileStream(filePath, FileMode.Open)) { //sReader.Length=32 byte[] buffer = new byte[sReader.Length]; //length=32,汉字占2个字节、英文占1个字节2*6+5+6+5+2*2=32 int length = sReader.Read(buffer, 0, buffer.Length); //result="蝈蝈first\r\n蝈蝈second\r\n蝈蝈third" string result = System.Text.Encoding.Default.GetString(buffer, 0, length); //result="蝈蝈first\r\n蝈蝈second\r\n蝈蝈third" result = System.Text.Encoding.Default.GetString(buffer); } using (FileStream sWriter = new FileStream(filePath, FileMode.Create)) { string content = "fileStream写入"; byte[] buffer = System.Text.Encoding.Default.GetBytes(content); sWriter.Write(buffer, 0, buffer.Length); //清空缓冲区,将缓冲区的数据写入到文件 sWriter.Flush(); //example文件中的内容变为"fileStream写入" } using (FileStream sAppender = new FileStream(filePath, FileMode.Append)) { string content = "fileStream追加"; byte[] buffer = System.Text.Encoding.Default.GetBytes(content); sAppender.Write(buffer, 0, buffer.Length); //清空缓冲区,将缓冲区的数据写入到文件 sAppender.Flush(); //example文件中的内容变为"fileStream写入fileStream写入的内容fileStream追加" } }
StreamReader&StreamWriter
StreamReader实现了抽象基类TextReader,而StreamWriter实现了抽象基类TextWriter,两者分别用于对流的读取与写入。StreamReader类:
1、公共属性
BaseStream 返回基础流。 CurrentEncoding 获取当前 StreamReader 对象正在使用的当前字符编码。 EndOfStream 获取一个值,该值表示当前的流位置是否在流的末尾。
2、公共方法
Close, 关闭 StreamReader 对象和基础流,并释放与读取器关联的所有系统资源。 (重写 TextReader..::.Close()()()。) CreateObjRef, 创建一个对象,该对象包含生成用于与远程对象进行通信的代理所需的全部相关信息。 (继承自 MarshalByRefObject。) DiscardBufferedData, 允许 StreamReader 对象丢弃其当前数据。 Dispose 已重载。 GetLifetimeService, 检索控制此实例的生存期策略的当前生存期服务对象。 (继承自 MarshalByRefObject。) InitializeLifetimeService, 获取控制此实例的生存期策略的生存期服务对象。 (继承自 MarshalByRefObject。) MemberwiseClone, 已重载。 Peek, 返回下一个可用的字符,但不使用它。 (重写 TextReader..::.Peek()()()。) Read, 已重载。 读取输入流中的下一个字符或下一组字符。 ReadBlock, 从当前流中读取最大 count 的字符并从 index 开始将该数据写入 buffer。 (继承自 TextReader。) ReadLine, 从当前流中读取一行字符并将数据作为字符串返回。 (重写 TextReader..::.ReadLine()()()。) ReadToEnd, 从流的当前位置到末尾读取流。 (重写 TextReader..::.ReadToEnd()()()。)
StreamReader实例代码如下:
public void OperateStream() { string filePath = @"e:\Study\test\example.txt"; string errorMsg = string.Empty; string msg=string.Empty; try { //生成StreamReader实例对象,方法一 StreamReader sReader = new StreamReader(filePath); //成StreamReader实例对象,方法二 //FileStream fileStream = new FileStream(filePath, FileMode.Open); //StreamReader sReaderFromFileStream = new StreamReader(fileStream); //每次只读一行 msg = sReader.ReadLine(); while (msg!=null) { Console.WriteLine("msg=" + msg); msg = sReader.ReadLine(); } sReader.Close(); sReader = new StreamReader(filePath); //EndOfStream判断当前的流位置是否在流的末尾 //如果文件中没有内容,EndOfStream为true while (!sReader.EndOfStream) { //每次只读一行 msg = sReader.ReadLine(); Console.WriteLine("msg=" + msg); } sReader.Close(); sReader = new StreamReader(filePath); //EndOfStream判断当前的流位置是否在流的末尾 //如果文件中没有内容,EndOfStream为true while (!sReader.EndOfStream) { //读取文件中所有内容 //此处为:蝈蝈first\r\n蝈蝈second\r\n蝈蝈third msg = sReader.ReadToEnd(); Console.WriteLine("msg=" + msg); } sReader.Close(); } catch (Exception ex) { errorMsg = ex.Message; } }
StreamWriter实例代码如下:
public void OperateStream() { string filePath = @"e:\Study\test\example.txt"; string errorMsg = string.Empty; string msg=string.Empty; try { //生成StreamWriter实例对象,方法一 StreamWriter sWriter = new StreamWriter(filePath); //生成StreamWriter实例对象,方法二 //FileStream fileStream = new FileStream(filePath, FileMode.Create); //StreamWriter sWriterFromFileStream = new StreamWriter(fileStream); //会替换原有内容 sWriter.Write("Write内容"); sWriter.Close(); sWriter = new StreamWriter(filePath); //会替换原有内容 sWriter.WriteLine("WriteLine内容"); sWriter.Close(); } catch (Exception ex) { errorMsg = ex.Message; } try { //生成StreamWriter追加内容实例对象,方法一 StreamWriter sAppender = new StreamWriter(filePath, true); //生成StreamWriter追加内容实例对象,方法二 //FileStream fileStream = new FileStream(filePath, FileMode.Append); //StreamWriter sAppenderFromFileStream = new StreamWriter(fileStream); sAppender.Write("追加Write内容1"); sAppender.Write("追加Write内容2"); //WriteLine会在内容之后加上"\r\n" sAppender.WriteLine("追加WriteLine内容001"); sAppender.WriteLine("追加WriteLine内容002"); sAppender.Write("追加Write内容3"); //追加后文件截图如下 sAppender.Close(); } catch (Exception ex) { errorMsg = ex.Message; } }
相关文章推荐
- sql2005 附加数据库出错(错误号:5123)解决方法
- C# FileStream文件读写详解
- SQL Server误区30日谈 第18天 有关FileStream的存储,垃圾回收以及其它
- SQL Server的FileStream和FileTable深入剖析
- C#中File类的文件操作方法详解
- SQL Server FileStream详解
- asp #include file 与 #include virtual 的区别小结第1/2页
- PHP file_exists问题杂谈
- css美化input file按钮的代码方法
- 改变文件域的样式实现思路同时兼容ie、firefox
- How to Auto Include a Javascript File
- 清理SQL Server 2008日志文件Cannot shrink log file 2 的解决方案
- Locate a File Using a File Open Dialog Box
- Save a File Using a File Save Dialog Box
- 基于java file 文件操作operate file of java的应用
- php file_put_contents()功能函数(集成了fopen、fwrite、fclose)
- PHP 得到根目录的 __FILE__ 常量
- 解析php dirname()与__FILE__常量的应用
- file_get_contents获取不到网页内容的解决方法
- 如何创建支持FILESTREAM的数据库示例探讨