FileStream对象表示在磁盘或网络路径上指向文件的流。当类提供向文件读写字节的方法时,经常使用StreamReader或StreamWriter执行这些功能。这是因为FileStream类操作字节和字节数组,而Stream类操作字符数据。字符数据易于使用,但是有些操作比如随机文件访问,就必须由FileStream对象执行。

FileStream对象的构造函数:

FileStream aFile = new FileStream(“Log.txt”,FileMode.OpenOrCreate);

FileMode枚举具有几种成员:

Append------如果文件存在,就打开文件,将文件位置移动到文件的末尾,并创建一个新文件。FileMode.Append仅可以与枚举Fileaccess.Write联合使用

Create------创建新文件;如果存在这样的文件,就破坏它。

CreateNew------创建新文件,但是如果已经存在此文件,则抛出异常

Open------打开现有的文件,但是不存在所指定的文件,则抛出异常

OpenOrCreate------如果文件存在,则规定打开文件,否则就创建新文件,如果文件已经存在,则保留在文件中的数据

Truncate------打开现有文件,清除其内容,然后我们可以向文件写入全新的数据,但是保留文件的初始创建日期,必须存在有文件,否则就抛出异常

访问级别

前面的构造函数默认以只读模式打开文件,需要一个附加参数规定不同的访问级别,此参数是FileAccess参数。

FileStream aFile=new FileStream(”Log.txt”,fileMode.OpenOrCreate,FileAccess.Write)

FileAccess枚举有三种类型:Read、Write、ReadWrite.此属性的作用是:基于用户的身份验证级别改变用户对文件的访问

读取文件的位置用seek:public long Seek(long offset,SeekOrigin origin)

Long offset是规定文件指针以字节为单位的移动距离;SeekOrigin origin是规定开始计算的起始位置,此枚举包含3个值:Begin,Current和End。

例:aFile.Seek(8,SeekOrigin.Begin);// SeekOrigin.Begin指得是文件指针从文件的第一个字节起;而参数‘8‘指得是移动到文件的第8个字节

例2:afile.Seek(2,SeekOrigin.Current)//在当前位置开始,再移动2个字节。

例3:aFile.Seek(-5,SeekOrigin.End)//在文件末端位置开始,倒数5个字节。

读取数据

使用FileStream类读取数据不像使用StreamReader和StreamWriter类读取数据那么容易,这是因为FileStream类只能处理原始字节(raw byey),这使得FileStream类可以用于任何数据文件,而不仅仅是文本文件,通过读取字节数据就可以读取类似图像和声音的文件。这种灵活性的代价是不能使用它直接读入字符串,而使用StreamWriter和StreaMeader类却可以这样处理,从是有几种转换类可以很容易地将字节数组转换为字符数组,或者进行相反的操作。

Read()方法是从FileStream对象所指向的文件访问数据的主要手段:

Public int Read(byte[] array,int offset, int count)//第一个参数是被传输进来的字节数组,用以接受FileStream对象中的数据。第二个参数是字节数组中开始写入数据的位置,它通常是0,表示从数组的开端的文件中向数组写数据,最后一个参数是规定从文件中读出多少字节。

写入数据

写入数据的流程是先获取字节数组,再把字节数据转换为字符数组,然后把这个字符数组用Write()方法写入到文件中,当然在写入的过程中,可以确定在文件的什么位置写入,写多少字符等等。

文件读写的范例:

读取文件
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;

namespace myFile
{
    class PRogram
    {
        static void Main(string[] args)
        {
            byte[] byData = new byte[100];//建立一个FileStream要用的字节组
            char[] charData = new char[100];//建立一个字符组

try
            {
                FileStream aFile = new FileStream("../../../../Data.txt", FileMode.Open);//实例化一个FileStream对象,用来操作data.txt文件,操作类型是
                
                aFile.Seek(55, SeekOrigin.Begin);//把文件指针指向,从文件开始位置向前55位字节所指的字节
                aFile.Read(byData, 0, 100);//读取FileStream对象所指的文件到字节数组里
            }
            catch (IOException e)
            {
                Console.WriteLine("close");
                return;
            }
            Decoder d = Encoding.UTF8.GetDecoder();//
            d.GetChars(byData, 0, byData.Length, charData, 0);//将编码字节数组转换为字符数组

Console.WriteLine(charData);
            Console.ReadLine();
            return;
        }
    }
}

写入文件:
 
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;

namespace myFile
{
    class Program
    {
        static void Main(string[] args)
        {
            byte[] byData = new byte[100];//建立一个FileStream要用的字节组
            char[] charData = new char[100];//建立一个字符组

try
            {
                FileStream aFile = new FileStream("../../../../Data.txt", FileMode.Open);//实例化一个FileStream对象,用来操作data.txt文件,操作类型是
               
                charData = "我是谁?111?".ToCharArray();//将字符串内的字符复制到字符组里
                aFile.Seek(0, SeekOrigin.End);
                Encoder el = Encoding.UTF8.GetEncoder();//编码器
                el.GetBytes(charData, 0, charData.Length, byData, 0, true);

aFile.Write(byData, 0, byData.Length);
            }
            catch (IOException e)
            {
                Console.WriteLine("close");
                return;
            }
           
        }
    }
}

最新文章

  1. ELK 安装笔记
  2. 谈谈iOS中的屏幕方向
  3. qgis自定义坐标系与qgis.db问题
  4. java初探/java读取文件
  5. Windows下修改Oracle默认的端口1521
  6. iOS6新特征:UICollectionView高级使用示例之CircleLayout
  7. Apache配置文件httpd.conf内容翻译
  8. C#7的新语法
  9. oracle 10g数据库下的 XDB组件的重新安装
  10. Linq 透明标识符
  11. 【MySQL】MySQL基础操作语句
  12. react组件实现扩展知识
  13. nodeEE双写与分布式事务要点一二
  14. 从密码到token, 一个授权的故事 auth2.0
  15. css3 动画与display:none冲突的解决方案
  16. 2018面向对象程序设计(Java) 第2周学习指导及要求
  17. 浏览器根对象document之数值和布尔属性
  18. javascript高级:原型与继承
  19. javascript变量,作用域和内存问题
  20. Leetcode 234. 回文链表(进阶)

热门文章

  1. Bitbucekt Reference
  2. CF447A DZY Loves Hash 模拟
  3. Java基础笔记(十六)——继承
  4. 由奇葩cookie导致服务器500来认识cookie
  5. vue中点击空白处隐藏弹框(用指令优雅地实现)
  6. webpack前端自动化构建工具
  7. 2017 ACM/ICPC Asia Regional Shenyang Online transaction transaction transaction
  8. 【SQL Server 优化性能的几个方面】(转)
  9. 10-----关于DOM的时间操作
  10. how to keep impact-crusher in good condition