• [转载]FileStream读写文件


    FileStream读写文件

    FileStream类:操作字节的,可以操作任何的文件

    StreamReader类和StreamWriter类:操作字符的,只能操作文本文件。

    1、FileStream类

    FileStream类

    命名空间:   System.IO

    (1)构造函数:

    • FileStream(String, FileMode):使用指定的路径和创建模式初始化FileStream 类的新实例。
    • FileStream(String, FileMode, FileAccess):使用指定的路径、创建模式和读/写权限初始化 FileStream 类的新实例。

    FileMode 枚举:

    • Append

    如果它存在,并且查找到该文件的末尾,或者创建一个新文件,请打开该文件。 这要求 FileIOPermissionAccess.Append 权限。 FileMode.Append 可以仅在结合使用 FileAccess.Write。 尝试查找该文件将引发结束之前将其置于 IOException 异常,并且任何尝试读取失败,将引发 NotSupportedException 异常。

    • Create

    指定操作系统应创建一个新的文件。 如果该文件已存在,则会覆盖它。 这要求 FileIOPermissionAccess.Write 权限。 FileMode.Create 等效于请求,如果该文件不存在,则使用 CreateNew; 否则为使用 Truncate。 如果该文件已存在但为隐藏的文件, UnauthorizedAccessException 则会引发异常。

    • CreateNew

    指定操作系统应创建一个新的文件。 这要求 FileIOPermissionAccess.Write 权限。 如果该文件已存在, IOException 则会引发异常。

    • Open

    指定操作系统应打开现有文件。 若要打开该文件的能力是依赖于指定的值 FileAccess 枚举。 一个 System.IO.FileNotFoundException 如果文件不存在将引发异常。

    • OpenOrCreate

    指定操作系统应打开一个文件,是否它存在,则否则,应创建一个新的文件。 如果使用打开该文件 FileAccess.Read,FileIOPermissionAccess.Read 权限是必需的。 如果文件访问是 FileAccess.Write,FileIOPermissionAccess.Write 权限是必需的。 如果使用打开该文件 FileAccess.ReadWrite,这两个 FileIOPermissionAccess.Read 和 FileIOPermissionAccess.Write 权限是必需的。

    • Truncate

    指定操作系统应打开现有文件。 当打开文件时,应被截断,以便其大小为零字节。 这要求 FileIOPermissionAccess.Write 权限。 尝试从文件中读取使用打开 FileMode.Truncate 导致 ArgumentException 异常。

    FileAccess 枚举:

    • Read:对文件的读取访问权限。 可以从文件读取数据。 将与结合起来 Write 为读/写访问。
    • ReadWrite:读取和写入到文件的访问。 可以写入和从文件中读取数据。
    • Write:对文件的写入访问权限。 数据可以写入该文件。 将与结合起来 Read 为读/写访问
    (2)方法
    • public override int Read(byte[] array, int offset, int count);
    • public override void Write(byte[] array, int offset, int count);
    • Dispose():释放由 Stream 使用的所有资源
    • Close()关闭当前流并释放与之关联的所有资源(如套接字和文件句柄)。

    (3)实例代码

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.IO;    //FileStream类的命名空间
    
    namespace Filestream读写文件
    {
        class Program
        {
            static void Main(string[] args)
            {
                //FileStream 操作字节的
                //1.创建FileStream类对象
                FileStream fsread = new FileStream(@"F:C#projectsabc.txt",FileMode.OpenOrCreate,FileAccess.Read);
                byte[] buffer=new byte[1024*1024*2];    //定义一个2M的字节数组
                //返回本次实际读取到的有效字节数
                int r=fsread.Read(buffer,0,buffer.Length);    //每次读取2M放到字节数组里面
                //将字节数组中每一个元素按照指定的编码格式解码成字符串
                string s=Encoding.Default.GetString(buffer,0,r);	
                //关闭流
                fsread.Close();
                //释放流所占用的资源
                fsread.Dispose();
                Console.WriteLine(s);  //打印读取到的内容
                Console.ReadKey();
            }
        }
    }

    结果为:

    (4)将创建文件流对象的过程写在using当中,会自动的帮助我们释放流所占用的资源。

    (将数据写入文件)代码为:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.IO;    //FileStream类的命名空间
    
    namespace Filestream读写文件
    {
        class Program
        {
            static void Main(string[] args)
            {
                
                //将创建文件流对象的过程写在using当中,会自动的帮助我们释放流所占用的资源
                using (FileStream fsWrite = new FileStream(@"F:C#projectsabc.txt", FileMode.OpenOrCreate, FileAccess.Write))
                {
                    string str="看数据会不会被覆盖掉";
                    byte[] buffer=Encoding.Default.GetBytes(str);
                    fsWrite.Write(buffer, 0, buffer.Length);
                }
                Console.WriteLine("写入完成...");
                Console.ReadKey();
            }
        }
    }

    运行结果为:

    (5)实现多媒体文件的复制

    代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.IO;    //FileStream类的命名空间
    
    namespace 多媒体文件复制
    {
        class Program
        {
            static void Main(string[] args)
            {
                //思路:就是先将要复制的多媒体文件读取出来,然后再写入到指定的地方
                string s_path = @"C:UsersmeiDesktop1、复习.avi";   //要读取的文件路径(文件有58.3M)
                string d_path = @"C:UsersmeiDesktop
    ew.avi";     //存放的路径
                CopyFile(s_path, d_path);
                Console.WriteLine("复制完成...");
                Console.ReadKey();
    
            }
            public static void CopyFile(string source,string target)    //自定义文件复制函数
            {
                //创建负责读取的流
                using (FileStream fsread = new FileStream(source, FileMode.Open, FileAccess.Read))
                {
                    //创建一个负责写入的流
                    using (FileStream fswrite = new FileStream(target, FileMode.OpenOrCreate, FileAccess.Write))
                    {
                        byte[] buffer=new byte[1024*1024*5];    //声明一个5M大小的字节数组
                        //因为文件有58.3M,要循环读取
                        while(true)
                        {
                            int r=fsread.Read(buffer, 0, buffer.Length);    //返回本次实际读取到的字节数
                            //如果返回一个0时,也就意味着什么都没有读到,读取完了
                            if(r==0)
                                break;
                            fswrite.Write(buffer,0,r);
    
                        }
                        
                   }
    
                }
            }
        }
    }

    运行结果:

    2、StreamReader类和StreamWriter类

    (1)StreamReader 类

    实现一个 TextReader,使其以一种特定的编码从字节流中读取字符。

    构造函数:

    • StreamReader(Stream, Encoding):用指定的字符编码为指定的流初始化 StreamReader 类的一个新实例。

    属性:

    • EndOfStream:获取一个值,该值指示当前的流位置是否在流结尾。

    方法:

    • ReadLine():从当前流中读取一行字符并将数据作为字符串返回。(覆盖 TextReader.ReadLine()。)

    实例1--使用StreamReader 类读取一个文本文件

    代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.IO;
    namespace StreamReader类和StreamWriter类
    {
        class Program
        {
            static void Main(string[] args)
            {
                //使用StreamReader来读取一个文本文件
                using (StreamReader sr = new StreamReader(@"F:C#projectsabc.txt",Encoding.Default))
                {
                    while (!sr.EndOfStream)
                    {
                        Console.WriteLine(sr.ReadLine());	//读取一行之后,在控制台打印输出
                    }
                    
                }
                Console.ReadKey();
            }
        }
    }

    运行结果:

    (2)StreamWriter类

    实现 TextWriter 用于将字符写入到流中特定的编码。

    构造函数:

    • StreamWriter(Stream):新实例初始化 StreamWriter 类为使用 utf-8 编码及默认的缓冲区大小指定的流。
    • StreamWriter(Stream, Encoding):新实例初始化 StreamWriter 为通过使用指定的编码及默认的缓冲区大小指定的流的类。
    • StreamWriter(String, Boolean):新实例初始化 StreamWriter 类为指定的文件使用默认的编码和缓冲区大小。 如果该文件存在,则可以将其覆盖或向其追加。 如果该文件不存在,此构造函数将创建一个新文件。

    方法:

    • Write(String):将字符串写入流。(覆盖 TextWriter.Write(String)。)

    实例---使用StreamWriter类向文件中写入内容

    代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.IO;
    namespace StreamReader类和StreamWriter类
    {
        class Program
        {
            static void Main(string[] args)
            {
               
                //使用StreamWriter来写入一个文本文件,解决乱码使用:System.Text.Encoding.Default
                using (StreamWriter st = new StreamWriter(@"F:C#projectsabc.txt",true,System.Text.Encoding.Default))
                {
                    
                       st.Write("非常好用的类1");
                }
                Console.WriteLine("写入完成...");
                Console.ReadKey();
            }
        }
    }

    结果:

  • 相关阅读:
    保存时出错jup
    Spyder默认页面布局调整
    根据所处位置提取单元格内容的函数(left、right、mid)和查找字符串位于单元格内容第几位的函数(find)
    excel打印出现多余空白页
    Excel的布尔值运算
    excel VBA一个fuction同时执行多个正则表达式,实现方法
    excel VBA把一个单元格内容按逗号拆分并依次替换到另一个单元格的括号里面(本题例子,把文本中的括号换成{答案}的格式,并按顺序填空)
    excel自动记录项目完成进度,是否逾期,逾期/提前完成天数,计算天数可以把now()改为today()
    jquery循环动画
    jquery动画(控制动画隐藏、显示时间轴)
  • 原文地址:https://www.cnblogs.com/AaronBear/p/8580224.html
Copyright © 2020-2023  润新知