当前位置: 首页 > news >正文

深入理解C#中的IO操作 - FileStream流详解与示例

文章目录

  • 一、FileStream类的介绍
  • 二、文件读取和写入
    • 2.1 文件读取(FileStream.Read)
    • 2.2 文件写入(FileStream.Write)
  • 三、文件复制、移动和目录操作
    • 3.1 文件复制(FileStream.Copy)
    • 3.2 文件移动(FileStream.Move)
    • 3.3 目录操作
  • 四、FileStream类的性能特点
  • 五、在WPF和ASP.NET中的应用
    • ASP.NET用于处理上传和下载文件示例
    • FileStream类的使用示例
  • 六、总结


在这里插入图片描述

在C#编程中,文件操作是不可或缺的一部分。C#提供了丰富的类库来方便地进行文件的读取、写入、复制、移动以及目录操作等操作。其中,FileStream类是进行文件操作的重要类之一。本文将深入分析FileStream类的功能、用法以及在文件读取、写入、复制、移动以及目录操作等操作中的应用示例,帮助读者全面理解FileStream类的应用价值。

一、FileStream类的介绍

FileStream类是System.IO命名空间中的一个抽象类,它提供了对文件的读取和写入操作。FileStream类不能直接实例化,但可以通过其派生类进行文件操作,如FileStream、BufferedStream等。FileStream类的主要功能包括文件读取、文件写入、文件复制、文件移动以及目录操作等。

二、文件读取和写入

FileStream类提供了两个重要的方法来进行文件的读取和写入操作:Read方法和Write方法。

2.1 文件读取(FileStream.Read)

Read方法从文件中读取字节数据,将其存储在byte数组中。方法原型如下:

public int Read(byte[] buffer, int offset, int count)

参数buffer表示存放读取数据的数组,offset表示数组的偏移量,count表示要读取的字节数。

示例代码:

using System;
using System.IO;class Program
{static void Main(){using (FileStream readStream = new FileStream("example.txt", FileMode.Open, FileAccess.Read)){byte[] buffer = new byte[1024];int bytesRead;while ((bytesRead = readStream.Read(buffer, 0, buffer.Length)) != 0){Console.WriteLine(Encoding.ASCII.GetString(buffer, 0, bytesRead));}}}
}

2.2 文件写入(FileStream.Write)

Write方法将字节数据写入文件。方法原型如下:

public void Write(byte[] buffer, int offset, int count)

参数buffer表示要写入的byte数组,offset表示数组的偏移量,count表示要写入的字节数。

示例代码:

using System;
using System.IO;class Program
{static void Main(){using (FileStream writeStream = new FileStream("example.txt", FileMode.OpenOrCreate, FileAccess.Write)){byte[] buffer = new byte[1024];string text = "Hello, World!";byte[] textBytes = Encoding.ASCII.GetBytes(text);writeStream.Write(textBytes, 0, textBytes.Length);}}
}

三、文件复制、移动和目录操作

FileStream类还提供了一些方法来进行文件的复制和移动操作,以及创建和获取目录信息。

3.1 文件复制(FileStream.Copy)

Copy方法用于复制文件。方法原型如下:

public static long Copy(string sourceFileName, string destinationFileName, int bufferSize)

参数sourceFileName表示源文件的名称,destinationFileName表示目标文件的名称,bufferSize表示缓冲区大小。

示例代码:

using System;
using System.IO;class Program
{static void Main(){string sourceFile = "example.txt";string destinationFile = "example_copy.txt";File.Copy(sourceFile, destinationFile, 1024);}
}

3.2 文件移动(FileStream.Move)

Move方法用于移动文件。方法原型如下:

public static void Move(string sourceFileName, string destinationFileName)

参数sourceFileName表示源文件的名称,destinationFileName表示目标文件的名称。

示例代码:

using System;
using System.IO;class Program
{static void Main(){string sourceFile = "example.txt";string destinationFile = "example_moved.txt";File.Move(sourceFile, destinationFile);}
}

3.3 目录操作

FileStream类本身不直接提供目录操作的功能,但是可以通过Directory类来进行目录的创建、获取最后写入时间等操作。

using System;
using System.IO;class Program
{static void Main(){// 创建目录string directoryPath = "example_directory";Directory.CreateDirectory(directoryPath);// 获取目录的最后写入时间DateTime lastWriteTime = Directory.GetLastWriteTime(directoryPath);Console.WriteLine($"The last write time of the directory is: {lastWriteTime}");}
}

四、FileStream类的性能特点

FileStream类是用于文件I/O操作的低级别流,它提供了对文件的直接访问,但并不提供高级的缓存机制。因此,它的读取速度和写入能力取决于底层的文件系统和硬件。在多核处理器系统上,FileStream类的并行性能主要受限于操作系统对文件的锁定机制。

FileStream类在进行文件操作时,会占用一定的内存资源,因为它需要维护内部的状态信息,如文件位置、缓存等。在大规模文件操作中,FileStream类的性能可能会受到影响,此时可以考虑使用更高层次的抽象,如StreamReader、StreamWriter、BinaryReader、BinaryWriter等,它们通常提供更好的性能和更简单的使用方式。

五、在WPF和ASP.NET中的应用

在WPF中,FileStream类可以用于读取或写入本地文件系统中的文件。例如,可以创建一个FileStream来读取用户的文档或图片,或者将应用程序的配置文件写入文件系统。

ASP.NET用于处理上传和下载文件示例

在ASP.NET中,FileStream类可以用于处理上传和下载文件。例如,可以使用FileStream来读取用户上传的文件,或者将文件写入服务器上的目录以供下载。

// ASP.NET中上传文件示例
public void UploadFile(HttpPostedFileBase file)
{string filePath = "C:\\path\\to\\upload\\" + file.FileName;using (FileStream fileStream = new FileStream(filePath, FileMode.Create)){file.InputStream.CopyTo(fileStream);}
}// ASP.NET中下载文件示例
public void DownloadFile(string filePath)
{using (FileStream fileStream = new FileStream(filePath, FileMode.Open)){// 创建一个MemoryStream来复制文件内容MemoryStream memoryStream = new MemoryStream();fileStream.CopyTo(memoryStream);memoryStream.WriteTo(Response.OutputStream);Response.ContentType = "application/octet-stream";Response.AddHeader("Content-Disposition", "attachment; filename=" + Path.GetFileName(filePath));memoryStream.Close();}
}

FileStream类的使用示例

以下是一个简单的示例,展示了如何使用FileStream类进行文件的读取和写入操作:

using System;
using System.IO;class Program
{static void Main(){// 创建一个FileStream对象,用于读取文件using (FileStream readStream = new FileStream("example.txt", FileMode.Open, FileAccess.Read)){byte[] buffer = new byte[1024];int bytesRead;while ((bytesRead = readStream.Read(buffer, 0, buffer.Length)) != 0){Console.WriteLine(Encoding.ASCII.GetString(buffer, 0, bytesRead));}}// 创建一个FileStream对象,用于写入文件using (FileStream writeStream = new FileStream("example.txt", FileMode.OpenOrCreate, FileAccess.Write)){byte[] buffer = new byte[1024];string text = "Hello, World!";byte[] textBytes = Encoding.ASCII.GetBytes(text);writeStream.Write(textBytes, 0, textBytes.Length);}}
}

在这个示例中,我们首先创建了一个FileStream对象用于读取文件,然后创建了一个FileStream对象用于写入文件。这两个操作分别使用了一个byte数组来存储读取和写入的数据。

六、总结

FileStream类是C#中进行文件I/O操作的重要类之一。通过本文的分析,我们了解了FileStream类的功能、用法以及在文件读取、写入、复制、移动以及目录操作等操作中的应用示例。FileStream类的性能特点以及在WPF和ASP.NET中的应用也得到了讨论。希望这些信息能够帮助读者更好地理解和运用FileStream类,提高编程效率和解决实际问题的能力。

相关文章:

深入理解C#中的IO操作 - FileStream流详解与示例

文章目录 一、FileStream类的介绍二、文件读取和写入2.1 文件读取(FileStream.Read)2.2 文件写入(FileStream.Write) 三、文件复制、移动和目录操作3.1 文件复制(FileStream.Copy)3.2 文件移动(…...

信息泄露--注意点点

目录 明确目标: 信息泄露: 版本软件 敏感文件 配置错误 url基于文件: url基于路由: 状态码: http头信息泄露 报错信息泄露 页面信息泄露 robots.txt敏感信息泄露 .get文件泄露 --判断: 搜索引擎收录泄露 BP: 爆破: 明确目标: 失能 读取 写入 执行 信息泄…...

位运算符

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 位运算符是把数字看作二进制数来进行计算的,因此,需要先将要执行运算的数据转换为二进制,然后才能进行执行运算。…...

云上聚智——移动云云服务器进行后端的搭建及部署

什么是移动云 移动云是指将移动设备和云计算技术相结合,为移动应用提供强大的计算和存储能力的服务模式。传统的移动应用通常在本地设备上进行计算和存储,而移动云将这些任务转移到云端进行处理。通过移动云,移动设备可以利用云端的高性能计算…...

C语言程序的编译

目录 一、预处理(预编译) 二、编译 三、汇编 四,链接 在前面讲到了宏的定义,那么宏在编译时候是如何发生替换的?接下来做一下详细的介绍C语言程序的编译过程主要包括以下几个步骤:预处理、编译、汇编和…...

滴滴三面 | Go后端研发

狠狠的被鞭打了快两个小时… 注意我写的题解不一定是对的,如果你认为有其他答案欢迎评论区留言 bg:23届 211本 社招 1. 自我介绍 2. 讲一个项目的点,因为用到了中间件平台的数据同步,于是开始鞭打数据同步。。 3. 如果同步的时候…...

深度学习之基于Yolov3的行人重识别

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 行人重识别(Person Re-Identification,简称ReID)是计算机视觉领域…...

防火墙最新技术汇总

防火墙技术持续发展,以应对日益复杂的网络安全威胁。以下是防火墙领域的一些最新技术汇总: 下一代防火墙(NGFW):NGFW结合了传统防火墙的分组过滤和状态检测功能,还集成了深度包检测(DPI&#xf…...

PikaUnsafe upfileupload

1.client check 客户端检测,前端js检测,禁用js和修改后缀名即可。 php格式不能上传,我们修改后缀上传。 蚁剑成功连接。 2.MIME type 这个就是 content-type 规定上传类型,上面的方法也能成功,也可以修改 conten-ty…...

git拉取项目前需要操作哪些?

1.输入 $ ssh-keygen -t rsa -C "秘钥说明" 按enter键 2.出现 ssh/id_rsa:(输入也可以不输入也可以) 然后按enter键 3.出现empty for no passphrase:(输入也可以不输入也可以) 然后按enter键 4.出现same passphrase again: (输入也可以不输入也…...

报名开启!2024 开源之夏丨Serverless Devs 课题已上线!

Serverless 是近年来云计算领域热门话题,凭借极致弹性、按量付费、降本提效等众多优势受到很多人的追捧,各云厂商也在不断地布局 Serverless 领域。 Serverless Devs 是一个由阿里巴巴发起的 Serverless 领域的开源项目,其目的是要和开发者们…...

DataBinding viewBinding(视图绑定与数据双向绑定)简单案例 (kotlin)

先上效果: 4个view的文字都是通过DataBinding填充的。交互事件:点击图片,切换图片 创建项目(android Studio 2023.3.1) Build.gradle(:app) 引入依赖库(完整源码) buildFeatures { vie…...

TensorFlow基于anaconda3快速构建

基于python构建太累 Installing Packages - Python Packaging User Guide 使用 pip 安装 TensorFlow 有兴趣自己学,我放弃了 -------------------------------------------------------- 下面基于anaconda 1、下载 Index of /anaconda/archive/ | 清华大学开…...

力扣72-编辑距离

题目链接 记忆化搜索: 解题关键:每次仅考虑两字符串word1、word2分别从0 - i修改成0-j下标的完全匹配(下标表示) 临界条件:当 i 或 j 小于0时,表示该字符串为空,编辑距离确定为 y1 或 x1 int dp[501][501…...

K8S 删除pod的正确步骤

在日常的k8s运维过程中&#xff0c;避免不了会对某些pod进行剔除&#xff0c;那么如何才能正确的剔除不需要的pod呢&#xff1f; 首先&#xff0c;需要查出想要删除的pod # 可通过任意方式进行查询 kubectl get pods -A |grep <podname> kubectl get pods -n <names…...

羊大师分析,羊奶健康生活的营养源泉

羊大师分析&#xff0c;羊奶健康生活的营养源泉 羊奶&#xff0c;作为一种古老的饮品&#xff0c;近年来因其独特的营养价值和健康益处而备受关注。今天&#xff0c;羊大师就来探讨一下羊奶与健康之间的紧密联系。 羊奶富含蛋白质、脂肪、维生素和矿物质等多种营养成分。羊奶…...

刷屏一天GPT-4o,发现GPT4用的都还不熟练?戳这儿

以ChatGPT、LLaMA、Gemini、DALLE、Midjourney、Stable Diffusion、星火大模型、文心一言、千问为代表AI大语言模型带来了新一波人工智能浪潮&#xff0c;可以面向科研选题、思维导图、数据清洗、统计分析、高级编程、代码调试、算法学习、论文检索、写作、翻译、润色、文献辅助…...

力扣HOT100 - 139. 单词拆分

解题思路&#xff1a; 动态规划 class Solution {public boolean wordBreak(String s, List<String> wordDict) {Set<String> wordDictSet new HashSet(wordDict);boolean[] dp new boolean[s.length() 1];dp[0] true;for (int i 1; i < s.length(); i) {…...

rush 功能特性梳理

Rush 可以让 JavaScript 开发者更轻松地同时构建、发布多个 NPM 包&#xff0c;即将多个包或项目放到一个大仓库下管理。 仅需一次 NPM 安装 仅需一步&#xff0c;Rush 便可以将你项目的所有依赖安装到一个公共文件夹下&#xff0c;该文件夹并不像 “package.json” 一样位于项…...

算法分析与设计复习__递归方程与分治

总结自&#xff1a;【算法设计与分析】期末考试突击课_哔哩哔哩_bilibili 1.递归&#xff0c;递归方程 1.1递归条件: 1.一个问题的解可以分解为几个子问题的解&#xff1b; 2.这个问题与分解之后的子问题&#xff0c;除了数据规模不同&#xff0c;求解思路完全一样; 3.存在…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...