zoukankan      html  css  js  c++  java
  • C# FileStream对象

    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;
                }
               
            }
        }
    }

  • 相关阅读:
    SharePoint 2013 配置基于表单的身份认证
    SharePoint 2013 场解决方案包含第三方程序集
    SharePoint 2010 站点附加数据升级到SP2013
    SharePoint 2013 在母版页中插入WebPart
    SharePoint 2013 搭建负载均衡(NLB)
    SharePoint 部署解决方案Feature ID冲突
    SharePoint 2013 配置基于AD的Form认证
    SharePoint Server 2016 Update
    SharePoint 2013 为用户组自定义EventReceiver
    SharePoint 2013 JavaScript API 记录
  • 原文地址:https://www.cnblogs.com/melao2006/p/4239669.html
Copyright © 2011-2022 走看看