C# FileStream类

在 C# 语言中文件读写流使用 FileStream 类来表示,FileStream 类主要用于文件的读写,不仅能读写普通的文本文件,还可以读取图像文件、声音文件等不同格式的文件。区别于File类的是它对文件可进行分步读写,减小内存压力,缺点是我们需要手动的关闭和释放资源,

FileAccess:

FileAccess 枚举类型主要用于设置文件的访问方式,具体的枚举值如下。

Read:以只读方式打开文件。

Write:以写方式打开文件。

ReadWrite:以读写方式打开文件。

FileMode:

FileMode 枚举类型主要用于设置文件打开或创建的方式,具体的枚举值如下。

CreateNew:创建新文件,如果文件已经存在,则会抛出异常。

Create:创建文件,如果文件不存在,则删除原来的文件,重新创建文件。

Open:打开已经存在的文件,如果文件不存在,则会抛出异常。

OpenOrCreate:打开已经存在的文件,如果文件不存在,则创建文件。

Truncate:打开已经存在的文件,并清除文件中的内容,保留文件的创建日期。如果文件不存在,则会抛出异常。

Append:打开文件,用于向文件中追加内容,如果文件不存在,则创建一个新文件。

FileShare:

FileShare 枚举类型主要用于设置多个对象同时访问同一个文件时的访问控制,具体的枚举值如下。

None:谢绝共享当前的文件。

Read:允许随后打开文件读取信息。

ReadWrite:允许随后打开文件读写信息。

Write:允许随后打开文件写入信息。

Delete:允许随后删除文件。

Inheritable:使文件句柄可由子进程继承。

FileOptions:

FileOptions 枚举类型用于设置文件的高级选项,包括文件是否加密、访问后是否删除等,具体的枚举值如下。

WriteThrough:指示系统应通过任何中间缓存、直接写入磁盘。

None:指示在生成 System.IO.FileStream 对象时不应使用其他选项。

Encrypted:指示文件是加密的,只能通过用于加密的同一用户账户来解密。

DeleteOnClose:指示当不再使用某个文件时自动删除该文件。

SequentialScan:指示按从头到尾的顺序访问文件。

RandomAccess:指示随机访问文件。

Asynchronous:指示文件可用于异步读取和写入。

 

File和FileStream的区别

File是一个静态类;FileStream是一个非静态类。

File:是一个文件的类,对文件进行操作。其内部封装了对文件的各种操作(MSDN:提供用于创建、复制、删除、移动和打开单一文件的静态方法,并协助创建FileStream对象)。

FileStream:文件流的类。对txt,xml,avi等文件进行内容写入、读取、复制...时候需要使用的一个工具。

代码:

string path = "D:\\test.txt";

FileStream fileStream1 = **new** FileStream(path, FileMode.Open);

FileStream fileStream2 = **new** FileStream(path, FileMode.Open, FileAccess.Read)

FileStream fileStream3 = **new** FileStream(path, FileMode.Open, FileAccess.ReadWrite, FileShare.Read);

FileStream fileStream4 = **new** FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read, 10, FileOptions.None)

        //定义文件路径string path = @"D:\\code\\test.txt";

        //创建 FileStream 类的实例

        FileStream fileStream = new FileStream(path, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);

        //定义属性

        string msg = "11111";

        //将字符串转换为字节数组

        byte[] bytes = Encoding.UTF8.GetBytes(msg);

        //向文件中写入字节数组

        fileStream.Write(bytes, 0, bytes.Length);

        //刷新缓冲区

        fileStream.Flush();

        //关闭流

        fileStream.Close();

class Program

{

    static void Main(string[] args)

    {

        //定义文件路径

        string path = @"D:\\code\\test.txt";

        //判断是否含有指定文件

        if (File.Exists(path))

        {

            FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read);

            //定义存放文件信息的字节数组

            byte[] bytes = new byte[fileStream.Length];

            //读取文件信息

            fileStream.Read(bytes, 0, bytes.Length);

            //将得到的字节型数组重写编码为字符型数组

            char[] c = Encoding.UTF8.GetChars(bytes);

            //输出

            Console.WriteLine(c);

            //关闭流

            fileStream.Close();

        }

        else

        {

            Console.WriteLine("不存在!");

        }

    }

}

public class FileSreamTest

    {

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

 

                     while (true)

                     {

                         //返回读取字节数

                        int r= fsRead.Read(buffer,0,buffer.Length);

                        if (r==0)

                        {

                            break;

                        }

                         //写入

                         fsWrite.Write(buffer,0,r);

                     }} }}

   static void Main(string[] args)

        {

          string source =@"E:\功能流程.7z";

          string target=@"C:\Users\CH190006\Desktop\Test\功能流程.7z";

          FileSreamTest.CopyFile(source,target);

            Console.ReadKey();

 

        }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值