c#语言------------FileStream类的基本使用

FileStream类不是静态类,使用时需要创建对象,FileStream类既可以对文本文件进行读也可以对多媒体文件进行写,以字节数组的形式进行读和写,多用于对大文件进行读写,区别于File类的是它对文件可进行分步读写,减小内存压力,缺点是我们需要手动的关闭和释放资源,

1、FileStream的常用方法

     FileStream类的构造函数;

 

          public FileStream(string path, FileMode mode, FileAccess access);

                path:
                        当前 FileStream 对象将封装的文件的相对路径或绝对路径。
                mode:
                        一个常数,用于确定如何打开或创建文件。
                access:

                        一个常数,用于确定 FileStream 对象访问文件的方式。

 

 

      FileStream类的方法;

 

            public override int Read(byte[] array, int offset, int count);

            public override void Write(byte[] array, int offset, int count);
  

 

FileStream的读操作

 

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FileStream的常用方法
{
    class Program
    {
        static void Main(string[] args)
        {
            string path =@"C:\Users\fighting  man\Desktop\FileStream的使用\vs快捷键.txt" ;
            FileStream fsRead = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Read);
            //三个参数(参数1读取文件的路径,参数2对文件的做什么样的操作,参数3对文件中的数据做什么样的操作)

            //FileStream 用来操作字节(不是一次性读取对内存压力小适合读大文件)
            try
            {
                //创建FileStream类的对象(路径,对文件的操作,对文本文件数据的操作)
                byte[] buffer = new byte[1024 * 1024 * 1];
                int r = fsRead.Read(buffer, 0, buffer.Length);//把数据读到字节数组中,返回实际读到的有效字节数
                string str = Encoding.Default.GetString(buffer, 0, r);//解码到实际读到的字节数
                Console.WriteLine(str);


            }
            finally
            {
                fsRead.Close();//关闭流
                fsRead.Dispose();//释放流

            }
            Console.ReadKey();



            
        }
    }
}

FileStream的写操作并不完全覆盖原来的文件,而是用多少字节覆盖原来的文件多少内容,而File类中的写入是完全覆盖原来的文件

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FileStream写数据
{
    class Program
    {
        static void Main(string[] args)
        {
            string path = @"C:\Users\fighting  man\Desktop\FileStream的使用\vs快捷键.txt";
            //将创建文件流对象的过程写在using当中,系统会自动的帮助我们是放资源
            using (FileStream fsWrite = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write))
            {
                string str = "我好像不能全部覆盖源文件中的数据";
                byte[] buffer = Encoding.Default.GetBytes(str);

                fsWrite.Write(buffer,0,buffer.Length);//无返回值,以字节数组的形式写入数据
            }
            Console.WriteLine("写入ok");
            Console.ReadKey();
        }
    }
}

FileStream分步读写大文件

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FilestreamMultiMediaCope
{
    class Program
    {
        static void Main(string[] args)
        {
            //先读取要复制的多媒体文件
            string source = @"C:\Users\fighting  man\Desktop\FileStream的使用\高数视频.flv";
            string target = @"C:\Users\fighting  man\Desktop\FileStream的使用\new.flv";
            CopeFile(source,target);
            Console.WriteLine("完成");
            Console.ReadKey();

        }
        public static void CopeFile(string str,string str1)
        {
            //首先创建一个读取流的对象
            using(FileStream fsRead = new FileStream(str,FileMode.OpenOrCreate,FileAccess.Read))
            {
                //然后创建一个写入流的对象
                using(FileStream fsWrite = new FileStream(str1,FileMode.OpenOrCreate,FileAccess.Write))
                {
                    byte[] buffer = new byte[1024 * 1024 * 5];//创建一个5M的字符数组用于存放读到的数据
                    //数据比较大我们应该用循环来读
                    while (true)
                    {
                       
                        int r = fsRead.Read(buffer, 0, buffer.Length);//把数据读到字节数组中,返回实际读到的字节数 
                        //如果返回0什么也没读取到,读取完了
                        if (r == 0)
                        {
                            break;
                        }
                        fsWrite.Write(buffer,0,r);
                    }
                }
            }
        }
    }
}

 

  • 7
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
C#中,可以使用HttpWebRequest来发送POST请求。然而,对于POST方式,HttpWebRequest并没有提供一个很方便的方法来设置Content-Type。但是,你可以通过设置HttpWebRequest的ContentType属性来指定Content-Type。在你的代码中,你可以使用"multipart/form-data"作为ContentType来上传json表格和文件。\[2\] 在你的代码中,你可以使用PostIQ函数来发送POST请求。这个函数接受四个参数:URL(服务器路径),FileName(文件名),jsonstr(表格),FilePath(文件路径)。在函数内部,它使用FileStream来打开文件,并将文件流作为上传的一部分。同时,它还使用一个字典来存储POST请求的参数,其中"entity"是表格的名称。最后,它调用HttpUploadClient.Execute方法来执行POST请求,并返回结果。\[2\] 在你的代码中,还有一个UploadParameterType,它定义了一些属性和方法来设置上传文件的参数。其中,Url属性用于指定上传地址,FileNameKey和FileNameValue属性用于指定文件名称的键值对,Encoding属性用于指定编码格式,UploadStream属性用于指定上传文件的流,PostParameters属性用于指定上传文件携带的参数集合。\[3\] 所以,通过设置HttpWebRequest的ContentType属性为"multipart/form-data",你可以在C#中发送POST请求,并指定Content-Type为"multipart/form-data"。\[2\] #### 引用[.reference_title] - *1* [C#使用HttpWebRequest用Post提交MultiPart数据](https://blog.csdn.net/aohaizhi7722/article/details/102160156)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [c# HTTP Post上传文件与表格 ContentType = “multipart/form-data](https://blog.csdn.net/www89574622/article/details/114641205)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值