C#(三十七)之基于流的文件操作(FileStream)

简介: 本篇内容记录了FileStream类属性和方法。

QQ图片20220426155355.jpg

FileStream类属性和方法


属性


CanRead                      指示当前文件流是否支持读取

CanWrite                     指示当前文件流是否支持写入

CanSeek                      指示当前文件流是否支持查找

IsAsync                        FileStream是同步打开还是异步打开

Length                         流的长度(字节数)

CanTimeOut                当前文件流是否可以超时

ReadTimeOut               最大读取时间,超过则超时
WriteTimeOut                  最大写入时间,超过则超时


方法


Read()                          从文件中读取字节块

ReadByte()                   从文件中读取一个字节

Write()                         将字节块写入文件

WriteByte()                   将一个字节写入文件

Seek()                          设置当前流的位置

Close()                         关闭当前流并释放与之关联的资源

Dispose():                释放由 Stream 使用的所有资源


FileStream同样使用命名空间System.IO


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


FileStream类相关的枚举


FileMode:Append、Create、CreateNew、Open、OpenOrCreate、Truncate(切除)

FileAccess:Read、ReadWrite、Write

FileShare:Inheritable(使文件的句柄可由子进程进行继承)、None、Read、ReadWrite、Write

 

写入文件:


public static string filePath = @"F:codeFileStreams.txt";
        public FileStream ff = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite);
        public string sss = "";
        /// <summary>
        /// 创建文件并写入
        /// </summary>
        private void button1_Click(object sender, EventArgs e)
        {
            string filePath = @"F:codeFileStreams.txt";
            FileStream ff = new FileStream(filePath,FileMode.OpenOrCreate,FileAccess.ReadWrite);
            string content = @richTextBox1.Text;
            // 将字符串读入字节数组中。
            byte[] buffer = Encoding.Default.GetBytes(content);
            // 将数组写入文件
            ff.Write(buffer, 0, buffer.Length);
            ff.Close();
            MessageBox.Show("写入成功");
        }


文件读取:


/// <summary>
        /// 读取文件
        /// </summary>
        private void button2_Click(object sender, EventArgs e)
        {
            if (sss == "")
            {
                byte[] buffer = new byte[1024 * 1024 * 2];    //定义一个2M的字节数组
                //返回本次实际读取到的有效字节数
                int r = ff.Read(buffer, 0, buffer.Length);    //每次读取2M放到字节数组里面
                //将字节数组中每一个元素按照指定的编码格式解码成字符串
                sss = Encoding.Default.GetString(buffer, 0, r);
                label1.Text = sss;
                // 关闭文件流
                ff.Close();
                // 关闭资源
                ff.Dispose();
            }
            else
            {
                MessageBox.Show("请不要重复点击");
            }
        }

 

复制文件:


/// <summary>
        /// 使用FileStream复制文件
        /// </summary>
        private void button3_Click(object sender, EventArgs e)
        {
            string oldPath = @"F:视频教程曾瑛C#视频教程合集(111课程)zy1.flv";
            string newPath = @"D:qqqqqqq.flv";
            CopyFile(oldPath, newPath);
            MessageBox.Show("复制成功");
        }
        /// <summary>
        /// 自定义文件复制函数
        /// </summary>
        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大小的字节数组
                    //因为文件不止5M,要循环读取
                    while(true)
                    {
                        int r=fsread.Read(buffer, 0, buffer.Length);    //返回本次实际读取到的字节数
                        //如果返回一个0时,也就意味着什么都没有读到,读取完了
                        if(r==0)
                            break;
                        fswrite.Write(buffer,0,r);
                    }
               }
            }
        }



目录
相关文章
|
8月前
|
C#
C# 文件操作(全部) 追加、拷贝、删除、移动文件、创建目录
C# 文件操作(全部) 追加、拷贝、删除、移动文件、创建目录
103 0
|
4月前
|
安全 C# 开发者
C# 一分钟浅谈:文件操作与文件流详解
【9月更文挑战第4天】在日常开发中,文件的读写是基本而重要的任务。C# 通过 `System.IO` 命名空间提供了多种工具,如 `FileStream`、`StreamReader` 和 `StreamWriter` 等,用于处理文件和流。本文从基础概念入手,详细介绍了这些类的使用方法,并讨论了常见错误及其避免策略,包括文件不存在、权限问题和文件被占用等。通过示例代码,展示了如何创建、读取文件以及进行二进制数据操作,并强调了异常处理和性能优化的重要性。掌握这些技巧对于提升编程能力至关重要。
224 2
|
C#
使用C#进行文件操作
在许多应用程序中,文件操作是常见的任务之一。无论是读取文件内容、写入数据,还是创建、移动和删除文件,C# 编程语言都提供了强大且易于使用的文件操作功能。本篇博客将介绍如何使用C#来进行基本的文件操作。
81 0
|
NoSQL 定位技术 API
基于C#的ArcEngine二次开发29:GDB文件操作及异常处理(上)
基于C#的ArcEngine二次开发29:GDB文件操作及异常处理
基于C#的ArcEngine二次开发29:GDB文件操作及异常处理(上)
|
NoSQL C# 数据库
基于C#的ArcEngine二次开发29:GDB文件操作及异常处理(下)
基于C#的ArcEngine二次开发29:GDB文件操作及异常处理
C#编程-117:文件流FileStream类
C#编程-117:文件流FileStream类
146 0
C#编程-117:文件流FileStream类
C#编程-111:文件操作之获取基本信息
C#编程-111:文件操作之获取基本信息
C#编程-111:文件操作之获取基本信息
C#编程-110:文件操作File静态类
C#编程-110:文件操作File静态类
136 0
C#编程-110:文件操作File静态类
|
C#
30天C#基础巩固------集合,File(文件操作 ),Encoding处理字符集
30天C#基础巩固------集合,File(文件操作 ),Encoding处理字符集
136 0
30天C#基础巩固------集合,File(文件操作 ),Encoding处理字符集
|
编解码 C#
C#(三十八)之StreamWriter StreamWriter使用方法及与FileStream类的区别
本篇内容记录了StreamReader类的属性和方法、StreamWriter类的属性和方法等
417 0
C#(三十八)之StreamWriter StreamWriter使用方法及与FileStream类的区别