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#projects\abc.txt",FileMode.OpenOrCreate,FileAccess.Read);
byte[] buffer=new byte[102410242]; //定义一个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#projects\abc.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:\Users\mei\Desktop\1、复习.avi"; //要读取的文件路径(文件有58.3M)
string d_path = @"C:\Users\mei\Desktop\new.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#projects\abc.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#projects\abc.txt",true,System.Text.Encoding.Default))
        {
            
               st.Write("非常好用的类1");
        }
        Console.WriteLine("写入完成...");
        Console.ReadKey();
    }
}

}
结果:


作者:阳光下的Smiles
来源:CSDN
原文:https://blog.csdn.net/liyuqian199695/article/details/70135584
版权声明:本文为博主原创文章,转载请附上博文链接!

你可能感兴趣的:(FileStream读写文件)